From: Phil Dawes Date: Mon, 7 Sep 2009 17:20:43 +0000 (+0100) Subject: imul clobbers arg2 on x86.64, so stashing vm ptr on the stack X-Git-Tag: 0.97~5502^2~2^2~2 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=8049b441c2ccdc1571ea7cbc134d3865c008816d imul clobbers arg2 on x86.64, so stashing vm ptr on the stack --- diff --git a/vm/cpu-x86.S b/vm/cpu-x86.S index a18d1483fb..5360d6c227 100644 --- a/vm/cpu-x86.S +++ b/vm/cpu-x86.S @@ -21,7 +21,7 @@ DEF(void,primitive_fixnum_subtract,(void *myvm)): ret DEF(void,primitive_fixnum_multiply,(void *myvm)): - mov ARG0, ARG2 /* save vm ptr for overflow */ + push ARG0 /* save vm ptr for overflow */ mov (DS_REG),ARITH_TEMP_1 mov ARITH_TEMP_1,DIV_RESULT mov -CELL_SIZE(DS_REG),ARITH_TEMP_2 @@ -30,14 +30,16 @@ DEF(void,primitive_fixnum_multiply,(void *myvm)): imul ARITH_TEMP_2 jo multiply_overflow mov DIV_RESULT,(DS_REG) + pop ARG2 ret - multiply_overflow: sar $3,ARITH_TEMP_1 mov ARITH_TEMP_1,ARG0 mov ARITH_TEMP_2,ARG1 + pop ARG2 jmp MANGLE(overflow_fixnum_multiply) + DEF(F_FASTCALL void,c_to_factor,(CELL quot, void *vm)): PUSH_NONVOLATILE mov ARG0,NV_TEMP_REG