Comment out alien.remote-control tests for now
[factor/jcg.git] / vm / cpu-x86.S
blob7a0d738fe063b279fbd66ed66a9f14507afbdee5
1 DEF(void,primitive_fixnum_add,(void)):
2     mov (DS_REG),ARG0
3     mov -CELL_SIZE(DS_REG),ARG1
4     sub $CELL_SIZE,DS_REG
5     mov ARG1,ARITH_TEMP_1
6     add ARG0,ARITH_TEMP_1
7     jo MANGLE(overflow_fixnum_add)
8     mov ARITH_TEMP_1,(DS_REG)
9     ret
11 DEF(void,primitive_fixnum_subtract,(void)):
12     mov (DS_REG),ARG1
13     mov -CELL_SIZE(DS_REG),ARG0
14     sub $CELL_SIZE,DS_REG
15     mov ARG0,ARITH_TEMP_1
16     sub ARG1,ARITH_TEMP_1
17     jo MANGLE(overflow_fixnum_subtract)
18     mov ARITH_TEMP_1,(DS_REG)
19     ret
21 DEF(void,primitive_fixnum_multiply,(void)):
22     mov (DS_REG),ARITH_TEMP_1
23     mov ARITH_TEMP_1,DIV_RESULT
24     mov -CELL_SIZE(DS_REG),ARITH_TEMP_2
25     sar $3,ARITH_TEMP_2
26     sub $CELL_SIZE,DS_REG
27     imul ARITH_TEMP_2
28     jo multiply_overflow
29     mov DIV_RESULT,(DS_REG)
30     ret
31 multiply_overflow:
32     sar $3,ARITH_TEMP_1
33     mov ARITH_TEMP_1,ARG0
34     mov ARITH_TEMP_2,ARG1
35     jmp MANGLE(overflow_fixnum_multiply)
37 DEF(F_FASTCALL void,c_to_factor,(CELL quot)):
38         PUSH_NONVOLATILE
39         mov ARG0,NV_TEMP_REG
41         /* Create register shadow area for Win64 */
42         sub $32,STACK_REG
44         /* Save stack pointer */
45         lea -CELL_SIZE(STACK_REG),ARG0
46         call MANGLE(save_callstack_bottom)
48         /* Call quot-xt */
49         mov NV_TEMP_REG,ARG0
50         call *QUOT_XT_OFFSET(ARG0)
52         /* Tear down register shadow area */
53         add $32,STACK_REG
55         POP_NONVOLATILE
56         ret
58 DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to)):
59         /* rewind_to */
60         mov ARG1,STACK_REG                    
61         jmp *QUOT_XT_OFFSET(ARG0)
63 DEF(FASTCALL void,lazy_jit_compile,(CELL quot)):
64         mov STACK_REG,ARG1           /* Save stack pointer */
65         sub $STACK_PADDING,STACK_REG
66         call MANGLE(lazy_jit_compile_impl)
67         mov RETURN_REG,ARG0          /* No-op on 32-bit */
68         add $STACK_PADDING,STACK_REG
69         jmp *QUOT_XT_OFFSET(ARG0)    /* Call the quotation */
71 #ifdef WINDOWS
72         .section .drectve
73         .ascii " -export:c_to_factor"
74 #endif