電子書籍の厳選無料作品が豊富!

初めまして、現在、組み込みマイコンの開発で、アルテラ社のNios2を使用して他の人がコーディングした日立SH2から置換え作業をしています。
いままではinline_asmを利用して、64Bit演算をしていました。
a*b=sig_h(上位32Bit)、sig_l(下位32Bit)
void mac( long *a, long *b, long *sig_h, long *sig_l )
{
STS.LMACL,@-SP
STS.LMACH,@-SP
LDS.L@R7+,MACL
LDS.L@R6+,MACH
MAC.L@R4+,@R5+
STS.LMACH,@-R6
STS.LMACL,@-R7
LDS.L@SP+,MACH
LDS.L@SP+,MACL
}
この64Bit演算をC言語だけで求める方法はあるのでしょうか?
Nios2のマニュアルがすべて英語なので同じようなことが出来るかどうか調べている最中です。
いい案があればアドバイスの程お願いします。

A 回答 (1件)

日本アルテラ - Nios II 統合開発環境

http://www.altera.co.jp/products/software/produc …

を見ると、コンパイラはGCCを使っているようですから、
64bit整数型として long long intが使える可能性が高いと思われます。
実際使えるかどうかは、マニュアルで確認してください。

使えるなら、longをlong longにキャストしてから計算すれば、64bitの演算結果が得られます。

参考URL:http://www.altera.co.jp/products/software/produc …
    • good
    • 0
この回答へのお礼

マニュアルを確認すると、
long long intはなく、
long long 8Byte 2s complementがありましたので

早速以下のように実験してみました。
long a;
long b;
long long c;
a = 0x7fffffff;
b = 0x7fffffff;
c = (long long)a * (long long)b;
とすると
cは3FFFFFFF00000001の62bitの結果が返ってきました。
参考になりましたありがとうございます。m(__)m

お礼日時:2004/12/01 11:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!