2009-08-07 18:44:50 -04:00
|
|
|
! Copyright (C) 2006, 2009 Slava Pestov.
|
2007-09-20 18:09:08 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-10-06 01:20:00 -04:00
|
|
|
USING: accessors arrays generic kernel kernel.private math
|
|
|
|
memory namespaces make sequences layouts system hashtables
|
2008-10-20 02:56:28 -04:00
|
|
|
classes alien byte-arrays combinators words sets fry ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: cpu.architecture
|
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
! Representations -- these are like low-level types
|
2008-10-07 21:00:38 -04:00
|
|
|
|
2009-08-08 05:02:18 -04:00
|
|
|
! Unknown representation; this is used for ##copy instructions which
|
|
|
|
! get eliminated later
|
|
|
|
SINGLETON: any-rep
|
|
|
|
|
|
|
|
! Integer registers can contain data with one of these three representations
|
|
|
|
! tagged-rep: tagged pointer or fixnum
|
|
|
|
! int-rep: untagged fixnum, not a pointer
|
2009-08-07 18:44:50 -04:00
|
|
|
SINGLETONS: tagged-rep int-rep ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
! Floating point registers can contain data with
|
|
|
|
! one of these representations
|
2009-09-03 21:58:56 -04:00
|
|
|
SINGLETONS: float-rep double-rep ;
|
2009-06-02 19:23:47 -04:00
|
|
|
|
2009-09-03 21:58:56 -04:00
|
|
|
! On x86, floating point registers are really vector registers
|
2009-09-03 03:33:07 -04:00
|
|
|
SINGLETONS:
|
2009-09-03 21:58:56 -04:00
|
|
|
float-4-rep
|
|
|
|
double-2-rep
|
|
|
|
char-16-rep
|
|
|
|
uchar-16-rep
|
|
|
|
short-8-rep
|
|
|
|
ushort-8-rep
|
|
|
|
int-4-rep
|
|
|
|
uint-4-rep ;
|
2009-09-03 03:33:07 -04:00
|
|
|
|
|
|
|
UNION: vector-rep
|
2009-09-03 21:58:56 -04:00
|
|
|
float-4-rep
|
|
|
|
double-2-rep
|
|
|
|
char-16-rep
|
|
|
|
uchar-16-rep
|
|
|
|
short-8-rep
|
|
|
|
ushort-8-rep
|
|
|
|
int-4-rep
|
|
|
|
uint-4-rep ;
|
2009-09-03 03:33:07 -04:00
|
|
|
|
|
|
|
UNION: representation
|
|
|
|
any-rep
|
|
|
|
tagged-rep
|
|
|
|
int-rep
|
2009-09-03 21:58:56 -04:00
|
|
|
float-rep
|
|
|
|
double-rep
|
2009-09-03 03:33:07 -04:00
|
|
|
vector-rep ;
|
2009-06-02 19:23:47 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
! Register classes
|
|
|
|
SINGLETONS: int-regs float-regs ;
|
2009-06-02 19:23:47 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
UNION: reg-class int-regs float-regs ;
|
|
|
|
CONSTANT: reg-classes { int-regs float-regs }
|
2009-06-02 19:23:47 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
! A pseudo-register class for parameters spilled on the stack
|
|
|
|
SINGLETON: stack-params
|
|
|
|
|
2009-09-03 03:33:07 -04:00
|
|
|
GENERIC: reg-class-of ( rep -- reg-class )
|
|
|
|
|
|
|
|
M: tagged-rep reg-class-of drop int-regs ;
|
|
|
|
M: int-rep reg-class-of drop int-regs ;
|
2009-09-03 21:58:56 -04:00
|
|
|
M: float-rep reg-class-of drop float-regs ;
|
|
|
|
M: double-rep reg-class-of drop float-regs ;
|
2009-09-03 03:33:07 -04:00
|
|
|
M: vector-rep reg-class-of drop float-regs ;
|
|
|
|
M: stack-params reg-class-of drop stack-params ;
|
|
|
|
|
2009-09-08 14:56:17 -04:00
|
|
|
GENERIC: rep-size ( rep -- n ) foldable
|
2009-09-03 03:33:07 -04:00
|
|
|
|
|
|
|
M: tagged-rep rep-size drop cell ;
|
|
|
|
M: int-rep rep-size drop cell ;
|
2009-09-03 21:58:56 -04:00
|
|
|
M: float-rep rep-size drop 4 ;
|
|
|
|
M: double-rep rep-size drop 8 ;
|
2009-09-03 03:33:07 -04:00
|
|
|
M: stack-params rep-size drop cell ;
|
|
|
|
M: vector-rep rep-size drop 16 ;
|
|
|
|
|
|
|
|
GENERIC: scalar-rep-of ( rep -- rep' )
|
|
|
|
|
2009-09-03 21:58:56 -04:00
|
|
|
M: float-4-rep scalar-rep-of drop float-rep ;
|
|
|
|
M: double-2-rep scalar-rep-of drop double-rep ;
|
2009-06-02 19:23:47 -04:00
|
|
|
|
|
|
|
! Mapping from register class to machine registers
|
|
|
|
HOOK: machine-registers cpu ( -- assoc )
|
|
|
|
|
2008-10-28 05:38:37 -04:00
|
|
|
HOOK: two-operand? cpu ( -- ? )
|
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %load-immediate cpu ( reg obj -- )
|
2009-01-29 02:44:58 -05:00
|
|
|
HOOK: %load-reference cpu ( reg obj -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %peek cpu ( vreg loc -- )
|
|
|
|
HOOK: %replace cpu ( vreg loc -- )
|
|
|
|
HOOK: %inc-d cpu ( n -- )
|
|
|
|
HOOK: %inc-r cpu ( n -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-19 02:10:45 -04:00
|
|
|
HOOK: stack-frame-size cpu ( stack-frame -- n )
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %call cpu ( word -- )
|
2009-05-06 17:14:53 -04:00
|
|
|
HOOK: %jump cpu ( word -- )
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %jump-label cpu ( label -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %return cpu ( -- )
|
2008-10-07 17:17:55 -04:00
|
|
|
|
2009-05-29 02:39:14 -04:00
|
|
|
HOOK: %dispatch cpu ( src temp -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %slot cpu ( dst obj slot tag temp -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %slot-imm cpu ( dst obj slot tag -- )
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %set-slot cpu ( src obj slot tag temp -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %set-slot-imm cpu ( src obj slot tag -- )
|
|
|
|
|
2008-11-06 02:11:28 -05:00
|
|
|
HOOK: %string-nth cpu ( dst obj index temp -- )
|
2008-12-05 07:38:51 -05:00
|
|
|
HOOK: %set-string-nth-fast cpu ( ch obj index temp -- )
|
2008-11-06 02:11:28 -05:00
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %add cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %add-imm cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %sub cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %sub-imm cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %mul cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %mul-imm cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %and cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %and-imm cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %or cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %or-imm cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %xor cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %xor-imm cpu ( dst src1 src2 -- )
|
2009-07-17 00:50:48 -04:00
|
|
|
HOOK: %shl cpu ( dst src1 src2 -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %shl-imm cpu ( dst src1 src2 -- )
|
2009-07-17 00:50:48 -04:00
|
|
|
HOOK: %shr cpu ( dst src1 src2 -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %shr-imm cpu ( dst src1 src2 -- )
|
2009-07-17 00:50:48 -04:00
|
|
|
HOOK: %sar cpu ( dst src1 src2 -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %sar-imm cpu ( dst src1 src2 -- )
|
2009-08-28 20:02:59 -04:00
|
|
|
HOOK: %min cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %max cpu ( dst src1 src2 -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %not cpu ( dst src -- )
|
2008-12-06 16:31:17 -05:00
|
|
|
HOOK: %log2 cpu ( dst src -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %copy cpu ( dst src rep -- )
|
|
|
|
|
2009-07-16 19:29:40 -04:00
|
|
|
HOOK: %fixnum-add cpu ( label dst src1 src2 -- )
|
|
|
|
HOOK: %fixnum-sub cpu ( label dst src1 src2 -- )
|
|
|
|
HOOK: %fixnum-mul cpu ( label dst src1 src2 -- )
|
2008-11-28 06:33:58 -05:00
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %integer>bignum cpu ( dst src temp -- )
|
2008-11-05 05:16:08 -05:00
|
|
|
HOOK: %bignum>integer cpu ( dst src temp -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %unbox-float cpu ( dst src -- )
|
|
|
|
HOOK: %box-float cpu ( dst src temp -- )
|
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %add-float cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %sub-float cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %mul-float cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %div-float cpu ( dst src1 src2 -- )
|
2009-08-28 06:21:16 -04:00
|
|
|
HOOK: %min-float cpu ( dst src1 src2 -- )
|
|
|
|
HOOK: %max-float cpu ( dst src1 src2 -- )
|
2009-08-26 00:22:15 -04:00
|
|
|
HOOK: %sqrt cpu ( dst src -- )
|
2009-08-30 05:52:01 -04:00
|
|
|
HOOK: %unary-float-function cpu ( dst src func -- )
|
|
|
|
HOOK: %binary-float-function cpu ( dst src1 src2 func -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %single>double-float cpu ( dst src -- )
|
|
|
|
HOOK: %double>single-float cpu ( dst src -- )
|
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %integer>float cpu ( dst src -- )
|
|
|
|
HOOK: %float>integer cpu ( dst src -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %box-vector cpu ( dst src temp rep -- )
|
|
|
|
HOOK: %unbox-vector cpu ( dst src rep -- )
|
|
|
|
|
|
|
|
HOOK: %broadcast-vector cpu ( dst src rep -- )
|
|
|
|
HOOK: %gather-vector-2 cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %gather-vector-4 cpu ( dst src1 src2 src3 src4 rep -- )
|
|
|
|
|
|
|
|
HOOK: %add-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %sub-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %mul-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %div-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %min-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %max-vector cpu ( dst src1 src2 rep -- )
|
|
|
|
HOOK: %sqrt-vector cpu ( dst src rep -- )
|
|
|
|
HOOK: %horizontal-add-vector cpu ( dst src rep -- )
|
|
|
|
|
2009-09-03 22:22:43 -04:00
|
|
|
HOOK: %unbox-alien cpu ( dst src -- )
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %unbox-any-c-ptr cpu ( dst src temp -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %box-alien cpu ( dst src temp -- )
|
2009-09-02 07:22:37 -04:00
|
|
|
HOOK: %box-displaced-alien cpu ( dst displacement base temp1 temp2 base-class -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %alien-unsigned-1 cpu ( dst src -- )
|
|
|
|
HOOK: %alien-unsigned-2 cpu ( dst src -- )
|
|
|
|
HOOK: %alien-unsigned-4 cpu ( dst src -- )
|
|
|
|
HOOK: %alien-signed-1 cpu ( dst src -- )
|
|
|
|
HOOK: %alien-signed-2 cpu ( dst src -- )
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %alien-signed-4 cpu ( dst src -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %alien-cell cpu ( dst src -- )
|
|
|
|
HOOK: %alien-float cpu ( dst src -- )
|
|
|
|
HOOK: %alien-double cpu ( dst src -- )
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %alien-vector cpu ( dst src rep -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %set-alien-integer-1 cpu ( ptr value -- )
|
|
|
|
HOOK: %set-alien-integer-2 cpu ( ptr value -- )
|
|
|
|
HOOK: %set-alien-integer-4 cpu ( ptr value -- )
|
|
|
|
HOOK: %set-alien-cell cpu ( ptr value -- )
|
|
|
|
HOOK: %set-alien-float cpu ( ptr value -- )
|
|
|
|
HOOK: %set-alien-double cpu ( ptr value -- )
|
2009-09-03 03:33:07 -04:00
|
|
|
HOOK: %set-alien-vector cpu ( ptr value rep -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-12-06 10:16:29 -05:00
|
|
|
HOOK: %alien-global cpu ( dst symbol library -- )
|
|
|
|
|
2008-10-20 21:40:15 -04:00
|
|
|
HOOK: %allot cpu ( dst size class temp -- )
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %write-barrier cpu ( src card# table -- )
|
2009-07-30 22:28:27 -04:00
|
|
|
|
|
|
|
! GC checks
|
|
|
|
HOOK: %check-nursery cpu ( label temp1 temp2 -- )
|
|
|
|
HOOK: %save-gc-root cpu ( gc-root register -- )
|
|
|
|
HOOK: %load-gc-root cpu ( gc-root register -- )
|
|
|
|
HOOK: %call-gc cpu ( gc-root-count -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %prologue cpu ( n -- )
|
|
|
|
HOOK: %epilogue cpu ( n -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-11-24 09:16:14 -05:00
|
|
|
HOOK: %compare cpu ( dst temp cc src1 src2 -- )
|
|
|
|
HOOK: %compare-imm cpu ( dst temp cc src1 src2 -- )
|
2009-09-08 18:04:26 -04:00
|
|
|
HOOK: %compare-float-ordered cpu ( dst temp cc src1 src2 -- )
|
|
|
|
HOOK: %compare-float-unordered cpu ( dst temp cc src1 src2 -- )
|
2008-10-21 04:21:29 -04:00
|
|
|
|
2008-10-20 06:55:20 -04:00
|
|
|
HOOK: %compare-branch cpu ( label cc src1 src2 -- )
|
|
|
|
HOOK: %compare-imm-branch cpu ( label cc src1 src2 -- )
|
2009-09-08 18:04:26 -04:00
|
|
|
HOOK: %compare-float-ordered-branch cpu ( label cc src1 src2 -- )
|
|
|
|
HOOK: %compare-float-unordered-branch cpu ( label cc src1 src2 -- )
|
2008-10-07 17:17:55 -04:00
|
|
|
|
2009-09-02 07:22:37 -04:00
|
|
|
HOOK: %spill cpu ( src rep n -- )
|
|
|
|
HOOK: %reload cpu ( dst rep n -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-11-03 07:20:51 -05:00
|
|
|
HOOK: %loop-entry cpu ( -- )
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
! FFI stuff
|
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
! Return values of this class go here
|
|
|
|
GENERIC: return-reg ( reg-class -- reg )
|
|
|
|
|
|
|
|
! Sequence of registers used for parameter passing in class
|
|
|
|
GENERIC: param-regs ( reg-class -- regs )
|
|
|
|
|
|
|
|
M: stack-params param-regs drop f ;
|
|
|
|
|
|
|
|
GENERIC: param-reg ( n reg-class -- reg )
|
|
|
|
|
|
|
|
M: reg-class param-reg param-regs nth ;
|
|
|
|
|
|
|
|
M: stack-params param-reg drop ;
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
! Is this integer small enough to appear in value template
|
|
|
|
! slots?
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: small-enough? cpu ( n -- ? )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Is this structure small enough to be returned in registers?
|
2009-02-12 07:25:07 -05:00
|
|
|
HOOK: return-struct-in-registers? cpu ( c-type -- ? )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-11-17 14:34:37 -05:00
|
|
|
! Do we pass this struct by value or hidden reference?
|
|
|
|
HOOK: value-struct? cpu ( c-type -- ? )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-11-08 22:40:47 -05:00
|
|
|
! If t, all parameters are shadowed by dummy stack parameters
|
|
|
|
HOOK: dummy-stack-params? cpu ( -- ? )
|
|
|
|
|
|
|
|
! If t, all FP parameters are shadowed by dummy int parameters
|
|
|
|
HOOK: dummy-int-params? cpu ( -- ? )
|
|
|
|
|
|
|
|
! If t, all int parameters are shadowed by dummy FP parameters
|
|
|
|
HOOK: dummy-fp-params? cpu ( -- ? )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %prepare-unbox cpu ( -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
HOOK: %unbox cpu ( n rep func -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %unbox-long-long cpu ( n func -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-09-13 21:28:13 -04:00
|
|
|
HOOK: %unbox-small-struct cpu ( c-type -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-09-13 21:28:13 -04:00
|
|
|
HOOK: %unbox-large-struct cpu ( n c-type -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
HOOK: %box cpu ( n rep func -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %box-long-long cpu ( n func -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-06 01:20:00 -04:00
|
|
|
HOOK: %prepare-box-struct cpu ( -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-09-13 21:28:13 -04:00
|
|
|
HOOK: %box-small-struct cpu ( c-type -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-09-13 21:28:13 -04:00
|
|
|
HOOK: %box-large-struct cpu ( n c-type -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
HOOK: %save-param-reg cpu ( stack reg rep -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-07 18:44:50 -04:00
|
|
|
HOOK: %load-param-reg cpu ( stack reg rep -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %prepare-alien-invoke cpu ( -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %prepare-var-args cpu ( -- )
|
2007-10-30 01:46:41 -04:00
|
|
|
|
|
|
|
M: object %prepare-var-args ;
|
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %alien-invoke cpu ( function library -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-13 00:32:14 -04:00
|
|
|
HOOK: %cleanup cpu ( params -- )
|
|
|
|
|
|
|
|
M: object %cleanup ( params -- ) drop ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-10-20 02:56:28 -04:00
|
|
|
HOOK: %prepare-alien-indirect cpu ( -- )
|
|
|
|
|
|
|
|
HOOK: %alien-indirect cpu ( -- )
|
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %alien-callback cpu ( quot -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 18:07:38 -04:00
|
|
|
HOOK: %callback-value cpu ( ctype -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Return to caller with stdcall unwinding (only for x86)
|
2008-10-13 00:32:14 -04:00
|
|
|
HOOK: %callback-return cpu ( params -- )
|
|
|
|
|
|
|
|
M: object %callback-return drop %return ;
|