factor/library/compiler/x86/architecture.factor

45 lines
1018 B
Factor
Raw Normal View History

IN: compiler
USING: alien arrays assembler generic kernel kernel-internals
sequences words ;
2005-09-05 17:14:15 -04:00
! x86 register assignments
2005-12-05 19:07:41 -05:00
! EAX, ECX, EDX vregs
2005-09-05 17:14:15 -04:00
! ESI datastack
! EBX callstack
2005-12-07 00:14:24 -05:00
: ds-reg ESI ; inline
: cs-reg EBX ; inline
: remainder-reg EDX ; inline
2005-12-04 22:06:12 -05:00
: vregs { EAX ECX EDX } ; inline
2005-12-10 01:27:41 -05:00
: compile-c-call ( symbol dll -- )
2005-12-11 15:14:41 -05:00
2dup dlsym CALL rel-relative rel-dlsym ;
2005-12-10 01:02:13 -05:00
: compile-c-call* ( symbol dll args -- operands )
2005-12-10 03:03:45 -05:00
reverse-slice
2005-12-10 01:02:13 -05:00
[ [ PUSH ] each compile-c-call ] keep
2005-12-11 18:48:42 -05:00
[ drop EDX POP ] each ;
2005-12-10 01:02:13 -05:00
! On x86, parameters are never passed in registers.
2005-12-24 16:08:15 -05:00
M: int-regs return-reg drop EAX ;
2006-01-24 20:20:20 -05:00
M: int-regs fastcall-regs drop { } ;
2005-12-24 16:08:15 -05:00
2006-01-24 20:20:20 -05:00
M: float-regs fastcall-regs drop { } ;
2005-12-04 22:55:02 -05:00
: address-operand ( address -- operand )
#! On x86, we can always use an address as an operand
#! directly.
; inline
: fixnum>slot@ 1 SHR ; inline
2005-12-07 03:37:05 -05:00
: prepare-division CDQ ; inline
: compile-prologue ; inline
: compile-epilogue ; inline
: load-indirect ( dest literal -- )
add-literal [] MOV rel-absolute-cell rel-address ; inline