From: j8takagi Date: Thu, 11 Feb 2010 13:57:04 +0000 (+0900) Subject: SLAのオーバーフロー時の動作を修正 X-Git-Tag: v0.1~50 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51f7ad0eaf7349de95cfb2b68453017846d91846;p=YACASL2.git SLAのオーバーフロー時の動作を修正 --- diff --git a/as/FUNC/mula1.casl b/as/FUNC/mula1.casl deleted file mode 100644 index 8633b15..0000000 --- a/as/FUNC/mula1.casl +++ /dev/null @@ -1,49 +0,0 @@ -;;; -32767〜32767の範囲にある正数のかけ算(筆算方式)を行う -;;; 入力 GR1:被乗数 GR2:乗数 -;;; 出力 GR0:積 -;;; 被乗数または乗数が-32768の場合は、オーバーフロー -;;; 積が-32767未満または32767より大きい場合は、GR0は積の下位16ビットになり、オーバーフロー -MULA START - RPUSH - XOR GR0,GR0 ; 積 - AND GR1,GR1 ; (GR1 = 0)の場合、終了 - JZE FIN ; ↓ - AND GR2,GR2 ; (GR2 = 0)の場合、終了 - JZE FIN ; ↓ - LAD GR3,1 ; 対象ビット - XOR GR4,GR4 ; マイナスフラグ -CHK1 AND GR1,GR1 ; (GR1 > 0)の場合は、CHK2へジャンプ - JPL CHK2 ; ↓ - XOR GR1,ALLON ; GR1の正負を反転 - ADDA GR1,ONE ; ↓ - JOV FIN ; (GR1 = -32768)の場合は終了 - XOR GR4,ONE ; GR4 <- 1 -CHK2 AND GR2,GR2 ; (GR1 > 0)の場合は、LOOPへジャンプ - JPL LOOP ; ↓ - XOR GR2,ALLON ; GR2の正負を反転 - ADDA GR2,ONE ; ↓ - JOV FIN ; (GR2 = -32768)の場合は終了 - XOR GR4,ONE ; マイナスフラグを反転 -LOOP PUSH 0,GR3 ; ループ先頭。GR2のビット中でGR3の示したものが0の場合、NEXTへジャンプ - AND GR3,GR2 ; ↓ - POP GR3 ; ↓ - JZE NEXT ; ↓ - ADDA GR0,GR1 ; GR0 <- GR0 + GR1 - JOV FIN ; オーバーフローした場合、終了 -NEXT SLA GR3,1 ; GR3を1回左シフト - AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出 - JZE MIN ; ↓ - CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出 - JPL MIN ; ↓ - SLA GR1,1 ; GR1を1回左シフト - JOV FIN ; オーバーフローした場合、終了 - JUMP LOOP ; ループ終端 -MIN AND GR4,GR4 ; マイナスフラグがオフの場合、終了 - JZE FIN ; ↓ - XOR GR0,ALLON ; GR1の正負を反転 - ADDA GR0,ONE ; ↓ -FIN RPOP - RET -ONE DC 1 -ALLON DC #FFFF - END diff --git a/src/exec.c b/src/exec.c index 00cee8d..a757dfa 100644 --- a/src/exec.c +++ b/src/exec.c @@ -149,7 +149,7 @@ WORD sla(WORD val0, WORD val1) last = res & 0x4000; res <<= 1; } - res = sign | res; + res = sign | (res & 0x7F); /* OFに、レジスタから最後に送り出されたビットの値を設定 */ if(last > 0x0) { FR += OF; diff --git a/test/integration/casl2/mula1_call/0.txt b/test/integration/casl2/mula1_call/0.txt deleted file mode 100644 index d46221c..0000000 --- a/test/integration/casl2/mula1_call/0.txt +++ /dev/null @@ -1,1937 +0,0 @@ -../../../../casl2 -M640 ../../../../as/FUNC/mula_call.casl ../../../../as/FUNC/mula1.casl ../../../../as/FUNC/outa.casl -0 -0 -0 --------------------- -0 -1 -0 --------------------- -0 -2 -0 --------------------- -0 -127 -0 --------------------- -0 -128 -0 --------------------- -0 -151 -0 --------------------- -0 -217 -0 --------------------- -0 -255 -0 --------------------- -0 -256 -0 --------------------- -0 -257 -0 --------------------- -0 -32767 -0 --------------------- -0 --32768 -0 --------------------- -0 --32767 -0 --------------------- -0 --257 -0 --------------------- -0 --256 -0 --------------------- -0 --255 -0 --------------------- -0 --217 -0 --------------------- -0 --151 -0 --------------------- -0 --128 -0 --------------------- -0 --127 -0 --------------------- -0 --2 -0 --------------------- -0 --1 -0 --------------------- -1 -0 -0 --------------------- -1 -1 -1 --------------------- -1 -2 -2 --------------------- -1 -127 -127 --------------------- -1 -128 -128 --------------------- -1 -151 -151 --------------------- -1 -217 -217 --------------------- -1 -255 -255 --------------------- -1 -256 -256 --------------------- -1 -257 -257 --------------------- -1 -32767 -32767 --------------------- -1 --32768 -Warning: overflow --------------------- -1 --32767 --32767 --------------------- -1 --257 --257 --------------------- -1 --256 --256 --------------------- -1 --255 --255 --------------------- -1 --217 --217 --------------------- -1 --151 --151 --------------------- -1 --128 --128 --------------------- -1 --127 --127 --------------------- -1 --2 --2 --------------------- -1 --1 --1 --------------------- -2 -0 -0 --------------------- -2 -1 -2 --------------------- -2 -2 -4 --------------------- -2 -127 -254 --------------------- -2 -128 -256 --------------------- -2 -151 -302 --------------------- -2 -217 -434 --------------------- -2 -255 -510 --------------------- -2 -256 -512 --------------------- -2 -257 -514 --------------------- -2 -32767 -Warning: overflow --------------------- -2 --32768 -Warning: overflow --------------------- -2 --32767 -Warning: overflow --------------------- -2 --257 --514 --------------------- -2 --256 --512 --------------------- -2 --255 --510 --------------------- -2 --217 --434 --------------------- -2 --151 --302 --------------------- -2 --128 --256 --------------------- -2 --127 --254 --------------------- -2 --2 --4 --------------------- -2 --1 --2 --------------------- -127 -0 -0 --------------------- -127 -1 -127 --------------------- -127 -2 -254 --------------------- -127 -127 -16129 --------------------- -127 -128 -16256 --------------------- -127 -151 -19177 --------------------- -127 -217 -27559 --------------------- -127 -255 -32385 --------------------- -127 -256 -32512 --------------------- -127 -257 -32639 --------------------- -127 -32767 -Warning: overflow --------------------- -127 --32768 -Warning: overflow --------------------- -127 --32767 -Warning: overflow --------------------- -127 --257 --32639 --------------------- -127 --256 --32512 --------------------- -127 --255 --32385 --------------------- -127 --217 --27559 --------------------- -127 --151 --19177 --------------------- -127 --128 --16256 --------------------- -127 --127 --16129 --------------------- -127 --2 --254 --------------------- -127 --1 --127 --------------------- -128 -0 -0 --------------------- -128 -1 -128 --------------------- -128 -2 -256 --------------------- -128 -127 -16256 --------------------- -128 -128 -16384 --------------------- -128 -151 -19328 --------------------- -128 -217 -27776 --------------------- -128 -255 -32640 --------------------- -128 -256 -Warning: overflow --------------------- -128 -257 -Warning: overflow --------------------- -128 -32767 -Warning: overflow --------------------- -128 --32768 -Warning: overflow --------------------- -128 --32767 -Warning: overflow --------------------- -128 --257 -Warning: overflow --------------------- -128 --256 -Warning: overflow --------------------- -128 --255 --32640 --------------------- -128 --217 --27776 --------------------- -128 --151 --19328 --------------------- -128 --128 --16384 --------------------- -128 --127 --16256 --------------------- -128 --2 --256 --------------------- -128 --1 --128 --------------------- -151 -0 -0 --------------------- -151 -1 -151 --------------------- -151 -2 -302 --------------------- -151 -127 -19177 --------------------- -151 -128 -19328 --------------------- -151 -151 -22801 --------------------- -151 -217 -32767 --------------------- -151 -255 -Warning: overflow --------------------- -151 -256 -Warning: overflow --------------------- -151 -257 -Warning: overflow --------------------- -151 -32767 -Warning: overflow --------------------- -151 --32768 -Warning: overflow --------------------- -151 --32767 -Warning: overflow --------------------- -151 --257 -Warning: overflow --------------------- -151 --256 -Warning: overflow --------------------- -151 --255 -Warning: overflow --------------------- -151 --217 --32767 --------------------- -151 --151 --22801 --------------------- -151 --128 --19328 --------------------- -151 --127 --19177 --------------------- -151 --2 --302 --------------------- -151 --1 --151 --------------------- -217 -0 -0 --------------------- -217 -1 -217 --------------------- -217 -2 -434 --------------------- -217 -127 -27559 --------------------- -217 -128 -27776 --------------------- -217 -151 -32767 --------------------- -217 -217 -Warning: overflow --------------------- -217 -255 -Warning: overflow --------------------- -217 -256 -Warning: overflow --------------------- -217 -257 -Warning: overflow --------------------- -217 -32767 -Warning: overflow --------------------- -217 --32768 -Warning: overflow --------------------- -217 --32767 -Warning: overflow --------------------- -217 --257 -Warning: overflow --------------------- -217 --256 -Warning: overflow --------------------- -217 --255 -Warning: overflow --------------------- -217 --217 -Warning: overflow --------------------- -217 --151 --32767 --------------------- -217 --128 --27776 --------------------- -217 --127 --27559 --------------------- -217 --2 --434 --------------------- -217 --1 --217 --------------------- -255 -0 -0 --------------------- -255 -1 -255 --------------------- -255 -2 -510 --------------------- -255 -127 -32385 --------------------- -255 -128 -32640 --------------------- -255 -151 -Warning: overflow --------------------- -255 -217 -Warning: overflow --------------------- -255 -255 -Warning: overflow --------------------- -255 -256 -Warning: overflow --------------------- -255 -257 -Warning: overflow --------------------- -255 -32767 -Warning: overflow --------------------- -255 --32768 -Warning: overflow --------------------- -255 --32767 -Warning: overflow --------------------- -255 --257 -Warning: overflow --------------------- -255 --256 -Warning: overflow --------------------- -255 --255 -Warning: overflow --------------------- -255 --217 -Warning: overflow --------------------- -255 --151 -Warning: overflow --------------------- -255 --128 --32640 --------------------- -255 --127 --32385 --------------------- -255 --2 --510 --------------------- -255 --1 --255 --------------------- -256 -0 -0 --------------------- -256 -1 -256 --------------------- -256 -2 -512 --------------------- -256 -127 -32512 --------------------- -256 -128 -Warning: overflow --------------------- -256 -151 -Warning: overflow --------------------- -256 -217 -Warning: overflow --------------------- -256 -255 -Warning: overflow --------------------- -256 -256 -Warning: overflow --------------------- -256 -257 -Warning: overflow --------------------- -256 -32767 -Warning: overflow --------------------- -256 --32768 -Warning: overflow --------------------- -256 --32767 -Warning: overflow --------------------- -256 --257 -Warning: overflow --------------------- -256 --256 -Warning: overflow --------------------- -256 --255 -Warning: overflow --------------------- -256 --217 -Warning: overflow --------------------- -256 --151 -Warning: overflow --------------------- -256 --128 -Warning: overflow --------------------- -256 --127 --32512 --------------------- -256 --2 --512 --------------------- -256 --1 --256 --------------------- -257 -0 -0 --------------------- -257 -1 -257 --------------------- -257 -2 -514 --------------------- -257 -127 -32639 --------------------- -257 -128 -Warning: overflow --------------------- -257 -151 -Warning: overflow --------------------- -257 -217 -Warning: overflow --------------------- -257 -255 -Warning: overflow --------------------- -257 -256 -Warning: overflow --------------------- -257 -257 -Warning: overflow --------------------- -257 -32767 -Warning: overflow --------------------- -257 --32768 -Warning: overflow --------------------- -257 --32767 -Warning: overflow --------------------- -257 --257 -Warning: overflow --------------------- -257 --256 -Warning: overflow --------------------- -257 --255 -Warning: overflow --------------------- -257 --217 -Warning: overflow --------------------- -257 --151 -Warning: overflow --------------------- -257 --128 -Warning: overflow --------------------- -257 --127 --32639 --------------------- -257 --2 --514 --------------------- -257 --1 --257 --------------------- -32767 -0 -0 --------------------- -32767 -1 -32767 --------------------- -32767 -2 -Warning: overflow --------------------- -32767 -127 -Warning: overflow --------------------- -32767 -128 -Warning: overflow --------------------- -32767 -151 -Warning: overflow --------------------- -32767 -217 -Warning: overflow --------------------- -32767 -255 -Warning: overflow --------------------- -32767 -256 -Warning: overflow --------------------- -32767 -257 -Warning: overflow --------------------- -32767 -32767 -Warning: overflow --------------------- -32767 --32768 -Warning: overflow --------------------- -32767 --32767 -Warning: overflow --------------------- -32767 --257 -Warning: overflow --------------------- -32767 --256 -Warning: overflow --------------------- -32767 --255 -Warning: overflow --------------------- -32767 --217 -Warning: overflow --------------------- -32767 --151 -Warning: overflow --------------------- -32767 --128 -Warning: overflow --------------------- -32767 --127 -Warning: overflow --------------------- -32767 --2 -Warning: overflow --------------------- -32767 --1 --32767 --------------------- --32768 -0 -0 --------------------- --32768 -1 -Warning: overflow --------------------- --32768 -2 -Warning: overflow --------------------- --32768 -127 -Warning: overflow --------------------- --32768 -128 -Warning: overflow --------------------- --32768 -151 -Warning: overflow --------------------- --32768 -217 -Warning: overflow --------------------- --32768 -255 -Warning: overflow --------------------- --32768 -256 -Warning: overflow --------------------- --32768 -257 -Warning: overflow --------------------- --32768 -32767 -Warning: overflow --------------------- --32768 --32768 -Warning: overflow --------------------- --32768 --32767 -Warning: overflow --------------------- --32768 --257 -Warning: overflow --------------------- --32768 --256 -Warning: overflow --------------------- --32768 --255 -Warning: overflow --------------------- --32768 --217 -Warning: overflow --------------------- --32768 --151 -Warning: overflow --------------------- --32768 --128 -Warning: overflow --------------------- --32768 --127 -Warning: overflow --------------------- --32768 --2 -Warning: overflow --------------------- --32768 --1 -Warning: overflow --------------------- --32767 -0 -0 --------------------- --32767 -1 --32767 --------------------- --32767 -2 -Warning: overflow --------------------- --32767 -127 -Warning: overflow --------------------- --32767 -128 -Warning: overflow --------------------- --32767 -151 -Warning: overflow --------------------- --32767 -217 -Warning: overflow --------------------- --32767 -255 -Warning: overflow --------------------- --32767 -256 -Warning: overflow --------------------- --32767 -257 -Warning: overflow --------------------- --32767 -32767 -Warning: overflow --------------------- --32767 --32768 -Warning: overflow --------------------- --32767 --32767 -Warning: overflow --------------------- --32767 --257 -Warning: overflow --------------------- --32767 --256 -Warning: overflow --------------------- --32767 --255 -Warning: overflow --------------------- --32767 --217 -Warning: overflow --------------------- --32767 --151 -Warning: overflow --------------------- --32767 --128 -Warning: overflow --------------------- --32767 --127 -Warning: overflow --------------------- --32767 --2 -Warning: overflow --------------------- --32767 --1 -32767 --------------------- --257 -0 -0 --------------------- --257 -1 --257 --------------------- --257 -2 --514 --------------------- --257 -127 --32639 --------------------- --257 -128 -Warning: overflow --------------------- --257 -151 -Warning: overflow --------------------- --257 -217 -Warning: overflow --------------------- --257 -255 -Warning: overflow --------------------- --257 -256 -Warning: overflow --------------------- --257 -257 -Warning: overflow --------------------- --257 -32767 -Warning: overflow --------------------- --257 --32768 -Warning: overflow --------------------- --257 --32767 -Warning: overflow --------------------- --257 --257 -Warning: overflow --------------------- --257 --256 -Warning: overflow --------------------- --257 --255 -Warning: overflow --------------------- --257 --217 -Warning: overflow --------------------- --257 --151 -Warning: overflow --------------------- --257 --128 -Warning: overflow --------------------- --257 --127 -32639 --------------------- --257 --2 -514 --------------------- --257 --1 -257 --------------------- --256 -0 -0 --------------------- --256 -1 --256 --------------------- --256 -2 --512 --------------------- --256 -127 --32512 --------------------- --256 -128 -Warning: overflow --------------------- --256 -151 -Warning: overflow --------------------- --256 -217 -Warning: overflow --------------------- --256 -255 -Warning: overflow --------------------- --256 -256 -Warning: overflow --------------------- --256 -257 -Warning: overflow --------------------- --256 -32767 -Warning: overflow --------------------- --256 --32768 -Warning: overflow --------------------- --256 --32767 -Warning: overflow --------------------- --256 --257 -Warning: overflow --------------------- --256 --256 -Warning: overflow --------------------- --256 --255 -Warning: overflow --------------------- --256 --217 -Warning: overflow --------------------- --256 --151 -Warning: overflow --------------------- --256 --128 -Warning: overflow --------------------- --256 --127 -32512 --------------------- --256 --2 -512 --------------------- --256 --1 -256 --------------------- --255 -0 -0 --------------------- --255 -1 --255 --------------------- --255 -2 --510 --------------------- --255 -127 --32385 --------------------- --255 -128 --32640 --------------------- --255 -151 -Warning: overflow --------------------- --255 -217 -Warning: overflow --------------------- --255 -255 -Warning: overflow --------------------- --255 -256 -Warning: overflow --------------------- --255 -257 -Warning: overflow --------------------- --255 -32767 -Warning: overflow --------------------- --255 --32768 -Warning: overflow --------------------- --255 --32767 -Warning: overflow --------------------- --255 --257 -Warning: overflow --------------------- --255 --256 -Warning: overflow --------------------- --255 --255 -Warning: overflow --------------------- --255 --217 -Warning: overflow --------------------- --255 --151 -Warning: overflow --------------------- --255 --128 -32640 --------------------- --255 --127 -32385 --------------------- --255 --2 -510 --------------------- --255 --1 -255 --------------------- --217 -0 -0 --------------------- --217 -1 --217 --------------------- --217 -2 --434 --------------------- --217 -127 --27559 --------------------- --217 -128 --27776 --------------------- --217 -151 --32767 --------------------- --217 -217 -Warning: overflow --------------------- --217 -255 -Warning: overflow --------------------- --217 -256 -Warning: overflow --------------------- --217 -257 -Warning: overflow --------------------- --217 -32767 -Warning: overflow --------------------- --217 --32768 -Warning: overflow --------------------- --217 --32767 -Warning: overflow --------------------- --217 --257 -Warning: overflow --------------------- --217 --256 -Warning: overflow --------------------- --217 --255 -Warning: overflow --------------------- --217 --217 -Warning: overflow --------------------- --217 --151 -32767 --------------------- --217 --128 -27776 --------------------- --217 --127 -27559 --------------------- --217 --2 -434 --------------------- --217 --1 -217 --------------------- --151 -0 -0 --------------------- --151 -1 --151 --------------------- --151 -2 --302 --------------------- --151 -127 --19177 --------------------- --151 -128 --19328 --------------------- --151 -151 --22801 --------------------- --151 -217 --32767 --------------------- --151 -255 -Warning: overflow --------------------- --151 -256 -Warning: overflow --------------------- --151 -257 -Warning: overflow --------------------- --151 -32767 -Warning: overflow --------------------- --151 --32768 -Warning: overflow --------------------- --151 --32767 -Warning: overflow --------------------- --151 --257 -Warning: overflow --------------------- --151 --256 -Warning: overflow --------------------- --151 --255 -Warning: overflow --------------------- --151 --217 -32767 --------------------- --151 --151 -22801 --------------------- --151 --128 -19328 --------------------- --151 --127 -19177 --------------------- --151 --2 -302 --------------------- --151 --1 -151 --------------------- --128 -0 -0 --------------------- --128 -1 --128 --------------------- --128 -2 --256 --------------------- --128 -127 --16256 --------------------- --128 -128 --16384 --------------------- --128 -151 --19328 --------------------- --128 -217 --27776 --------------------- --128 -255 --32640 --------------------- --128 -256 -Warning: overflow --------------------- --128 -257 -Warning: overflow --------------------- --128 -32767 -Warning: overflow --------------------- --128 --32768 -Warning: overflow --------------------- --128 --32767 -Warning: overflow --------------------- --128 --257 -Warning: overflow --------------------- --128 --256 -Warning: overflow --------------------- --128 --255 -32640 --------------------- --128 --217 -27776 --------------------- --128 --151 -19328 --------------------- --128 --128 -16384 --------------------- --128 --127 -16256 --------------------- --128 --2 -256 --------------------- --128 --1 -128 --------------------- --127 -0 -0 --------------------- --127 -1 --127 --------------------- --127 -2 --254 --------------------- --127 -127 --16129 --------------------- --127 -128 --16256 --------------------- --127 -151 --19177 --------------------- --127 -217 --27559 --------------------- --127 -255 --32385 --------------------- --127 -256 --32512 --------------------- --127 -257 --32639 --------------------- --127 -32767 -Warning: overflow --------------------- --127 --32768 -Warning: overflow --------------------- --127 --32767 -Warning: overflow --------------------- --127 --257 -32639 --------------------- --127 --256 -32512 --------------------- --127 --255 -32385 --------------------- --127 --217 -27559 --------------------- --127 --151 -19177 --------------------- --127 --128 -16256 --------------------- --127 --127 -16129 --------------------- --127 --2 -254 --------------------- --127 --1 -127 --------------------- --2 -0 -0 --------------------- --2 -1 --2 --------------------- --2 -2 --4 --------------------- --2 -127 --254 --------------------- --2 -128 --256 --------------------- --2 -151 --302 --------------------- --2 -217 --434 --------------------- --2 -255 --510 --------------------- --2 -256 --512 --------------------- --2 -257 --514 --------------------- --2 -32767 -Warning: overflow --------------------- --2 --32768 -Warning: overflow --------------------- --2 --32767 -Warning: overflow --------------------- --2 --257 -514 --------------------- --2 --256 -512 --------------------- --2 --255 -510 --------------------- --2 --217 -434 --------------------- --2 --151 -302 --------------------- --2 --128 -256 --------------------- --2 --127 -254 --------------------- --2 --2 -4 --------------------- --2 --1 -2 --------------------- --1 -0 -0 --------------------- --1 -1 --1 --------------------- --1 -2 --2 --------------------- --1 -127 --127 --------------------- --1 -128 --128 --------------------- --1 -151 --151 --------------------- --1 -217 --217 --------------------- --1 -255 --255 --------------------- --1 -256 --256 --------------------- --1 -257 --257 --------------------- --1 -32767 --32767 --------------------- --1 --32768 -Warning: overflow --------------------- --1 --32767 -32767 --------------------- --1 --257 -257 --------------------- --1 --256 -256 --------------------- --1 --255 -255 --------------------- --1 --217 -217 --------------------- --1 --151 -151 --------------------- --1 --128 -128 --------------------- --1 --127 -127 --------------------- --1 --2 -2 --------------------- --1 --1 -1 --------------------- diff --git a/test/integration/casl2/mula1_call/Makefile b/test/integration/casl2/mula1_call/Makefile deleted file mode 100644 index ecbbb51..0000000 --- a/test/integration/casl2/mula1_call/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../CMD.mk # YACASL2DIR, CASL2 -CASL2FLAG = -M640 -ASDIR = $(YACASL2DIR)/as/FUNC -ASFILE = $(ASDIR)/mula_call.casl $(ASDIR)/mula1.casl $(ASDIR)/outa.casl -CMD = $(CASL2) $(CASL2FLAG) $(ASFILE) -include ../TEST.mk