[ 3 ] [ 1 t fixnum-overflow-control-flow-test ] unit-test
[ 2 ] [ 1 f fixnum-overflow-control-flow-test ] unit-test
+
+[ 4 ] [ 2 [ dup fixnum* ] compile-call ] unit-test
+[ 7 ] [ 2 [ dup fixnum* 3 fixnum+fast ] compile-call ] unit-test
"no-overflow" define-label
0 0 LI
0 MTXER
- src1 src1 tag-bits get SRAWI
- scratch-reg src1 src2 MULLWO.
+ scratch-reg src1 tag-bits get SRAWI
+ scratch-reg scratch-reg src2 MULLWO.
scratch-reg ds-reg 0 STW
"no-overflow" get BNO
src2 src2 tag-bits get SRAWI
- src1 src2 move>args
+ scratch-reg src2 move>args
%prepare-alien-invoke
"overflow_fixnum_multiply" f %alien-invoke
"no-overflow" resolve-label ;
"overflow" define-label
0 0 LI
0 MTXER
- src1 src1 tag-bits get SRAWI
- scratch-reg src1 src2 MULLWO.
+ scratch-reg src1 tag-bits get SRAWI
+ scratch-reg scratch-reg src2 MULLWO.
"overflow" get BO
scratch-reg ds-reg 0 STW
BLR
"overflow" resolve-label
src2 src2 tag-bits get SRAWI
- src1 src2 move>args
+ scratch-reg src2 move>args
%prepare-alien-invoke
"overflow_fixnum_multiply" f %alien-invoke-tail ;
[ { 0 0 -1 } ] [ { 1 0 0 } { 0 1 0 } cross ] unit-test
[ { 1 0 0 } ] [ { 0 1 0 } { 0 0 1 } cross ] unit-test
[ { 0 1 0 } ] [ { 0 0 1 } { 1 0 0 } cross ] unit-test
+
+[ { 1 0 0 } ] [ { 1 1 0 } { 1 0 0 } proj ] unit-test