USING: accessors arrays sequences math splitting make assocs
kernel layouts system alien.c-types classes.struct
cpu.architecture cpu.x86.assembler cpu.x86.assembler.operands
-cpu.x86 compiler.cfg.builder.alien compiler.cfg.registers ;
+cpu.x86 cpu.x86.64 compiler.cfg.builder.alien
+compiler.cfg.builder.alien.boxing compiler.cfg.registers ;
IN: cpu.x86.64.unix
M: int-regs param-regs
2drop { RDI RSI RDX RCX R8 R9 } ;
-M: float-regs param-regs
- 2drop { XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 } ;
+M: x86.64 param-regs
+ drop {
+ { int-regs { RDI RSI RDX RCX R8 R9 } }
+ { float-regs { XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 } }
+ } ;
M: x86.64 reserved-stack-space 0 ;
f 2array
] map ;
-: flatten-large-struct ( c-type -- seq )
- stack-size cell /i { int-rep t } <repetition> ;
-
M: x86.64 flatten-struct-type ( c-type -- seq )
- dup heap-size 16 >
- [ flatten-large-struct ]
- [ flatten-small-struct ] if ;
+ dup heap-size 16 <=
+ [ flatten-small-struct ] [ call-next-method [ first t 2array ] map ] if ;
M: x86.64 return-struct-in-registers? ( c-type -- ? )
heap-size 2 cells <= ;