| 
									
										
										
										
											2008-11-26 05:22:39 -05:00
										 |  |  | DEF(void,primitive_fixnum_add,(void)): | 
					
						
							|  |  |  |     mov (DS_REG),ARG0 | 
					
						
							|  |  |  |     mov -CELL_SIZE(DS_REG),ARG1 | 
					
						
							|  |  |  |     sub $CELL_SIZE,DS_REG | 
					
						
							|  |  |  |     mov ARG1,ARITH_TEMP_1 | 
					
						
							|  |  |  |     add ARG0,ARITH_TEMP_1 | 
					
						
							|  |  |  |     jo MANGLE(overflow_fixnum_add) | 
					
						
							|  |  |  |     mov ARITH_TEMP_1,(DS_REG) | 
					
						
							|  |  |  |     ret | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEF(void,primitive_fixnum_subtract,(void)): | 
					
						
							|  |  |  |     mov (DS_REG),ARG1 | 
					
						
							|  |  |  |     mov -CELL_SIZE(DS_REG),ARG0 | 
					
						
							|  |  |  |     sub $CELL_SIZE,DS_REG | 
					
						
							|  |  |  |     mov ARG0,ARITH_TEMP_1 | 
					
						
							|  |  |  |     sub ARG1,ARITH_TEMP_1 | 
					
						
							|  |  |  |     jo MANGLE(overflow_fixnum_subtract) | 
					
						
							|  |  |  |     mov ARITH_TEMP_1,(DS_REG) | 
					
						
							|  |  |  |     ret | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEF(void,primitive_fixnum_multiply,(void)): | 
					
						
							|  |  |  |     mov (DS_REG),ARITH_TEMP_1 | 
					
						
							|  |  |  |     mov ARITH_TEMP_1,DIV_RESULT | 
					
						
							|  |  |  |     mov -CELL_SIZE(DS_REG),ARITH_TEMP_2 | 
					
						
							|  |  |  |     sar $3,ARITH_TEMP_2 | 
					
						
							|  |  |  |     sub $CELL_SIZE,DS_REG | 
					
						
							|  |  |  |     imul ARITH_TEMP_2 | 
					
						
							|  |  |  |     jo multiply_overflow | 
					
						
							|  |  |  |     mov DIV_RESULT,(DS_REG) | 
					
						
							|  |  |  |     ret | 
					
						
							|  |  |  | multiply_overflow: | 
					
						
							|  |  |  |     sar $3,ARITH_TEMP_1 | 
					
						
							|  |  |  |     mov ARITH_TEMP_1,ARG0 | 
					
						
							|  |  |  |     mov ARITH_TEMP_2,ARG1 | 
					
						
							|  |  |  |     jmp MANGLE(overflow_fixnum_multiply) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-27 16:10:37 -04:00
										 |  |  | DEF(F_FASTCALL void,c_to_factor,(CELL quot)): | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 	PUSH_NONVOLATILE | 
					
						
							| 
									
										
										
										
											2008-11-08 21:32:23 -05:00
										 |  |  | 	mov ARG0,NV_TEMP_REG | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Create register shadow area for Win64 */ | 
					
						
							| 
									
										
										
										
											2008-11-08 21:32:23 -05:00
										 |  |  | 	sub $32,STACK_REG | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Save stack pointer */ | 
					
						
							|  |  |  | 	lea -CELL_SIZE(STACK_REG),ARG0 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 	call MANGLE(save_callstack_bottom) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 	/* Call quot-xt */ | 
					
						
							| 
									
										
										
										
											2008-11-08 21:32:23 -05:00
										 |  |  | 	mov NV_TEMP_REG,ARG0 | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 	call *QUOT_XT_OFFSET(ARG0) | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-08 21:32:23 -05:00
										 |  |  | 	/* Tear down register shadow area */ | 
					
						
							|  |  |  | 	add $32,STACK_REG | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 	POP_NONVOLATILE | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 	ret | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-27 16:10:37 -04:00
										 |  |  | DEF(F_FASTCALL void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to)): | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 	/* rewind_to */ | 
					
						
							|  |  |  | 	mov ARG1,STACK_REG                     | 
					
						
							| 
									
										
										
										
											2008-07-11 18:25:46 -04:00
										 |  |  | 	jmp *QUOT_XT_OFFSET(ARG0) | 
					
						
							| 
									
										
										
										
											2007-09-26 00:34:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-28 04:48:37 -04:00
										 |  |  | DEF(F_FASTCALL void,lazy_jit_compile,(CELL quot)): | 
					
						
							| 
									
										
										
										
											2007-09-26 00:34:37 -04:00
										 |  |  | 	mov STACK_REG,ARG1           /* Save stack pointer */ | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 	sub $STACK_PADDING,STACK_REG | 
					
						
							| 
									
										
										
										
											2008-11-24 16:59:27 -05:00
										 |  |  | 	call MANGLE(lazy_jit_compile_impl) | 
					
						
							| 
									
										
										
										
											2007-09-26 00:34:37 -04:00
										 |  |  | 	mov RETURN_REG,ARG0          /* No-op on 32-bit */ | 
					
						
							| 
									
										
										
										
											2008-11-07 21:33:32 -05:00
										 |  |  | 	add $STACK_PADDING,STACK_REG | 
					
						
							| 
									
										
										
										
											2008-07-11 18:25:46 -04:00
										 |  |  |         jmp *QUOT_XT_OFFSET(ARG0)    /* Call the quotation */ | 
					
						
							| 
									
										
										
										
											2007-10-04 12:56:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-06 18:09:22 -04:00
										 |  |  | #ifdef WINDOWS | 
					
						
							|  |  |  | 	.section .drectve | 
					
						
							|  |  |  | 	.ascii " -export:c_to_factor" | 
					
						
							|  |  |  | #endif |