]> gitweb.factorcode.org Git - factor.git/blob - basis/cpu/ppc/64/linux/linux.factor
6b4df01173559fe3d385ab5be29494a6cb590e9c
[factor.git] / basis / cpu / ppc / 64 / linux / linux.factor
1 ! Copyright (C) 2011 Erik Charlebois
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors system kernel layouts combinators
4 compiler.cfg.builder.alien.boxing sequences arrays math
5 alien.c-types cpu.architecture cpu.ppc alien.complex ;
6 IN: cpu.ppc.64.linux
7
8 M: linux lr-save 2 cells ;
9
10 M: linux has-toc ( -- ? ) t ;
11
12 M: linux reserved-area-size ( -- n ) 6 cells ;
13
14 M: linux allows-null-dereference ( -- ? ) f ;
15
16 M: ppc param-regs
17     drop {
18         { int-regs { 3 4 5 6 7 8 9 10 } }
19         { float-regs { 1 2 3 4 5 6 7 8 9 10 11 12 13 } }
20     } ;
21
22 M: ppc value-struct? drop t ;
23
24 M: ppc dummy-stack-params? t ;
25
26 M: ppc dummy-int-params? t ;
27
28 M: ppc dummy-fp-params? f ;
29
30 M: ppc long-long-on-stack? f ;
31
32 M: ppc long-long-odd-register? f ;
33
34 M: ppc float-right-align-on-stack? t ;
35
36 M: ppc flatten-struct-type ( type -- seq )
37     {
38         { [ dup lookup-c-type complex-double lookup-c-type = ]
39           [ drop { { double-rep f f } { double-rep f f } } ] }
40         { [ dup lookup-c-type complex-float lookup-c-type = ]
41           [ drop { { float-rep f f } { float-rep f f } } ] }
42         [ heap-size cell align cell /i { int-rep f f } <repetition> ]
43     } cond ;
44
45 M: ppc flatten-struct-type-return ( type -- seq )
46     {
47         { [ dup lookup-c-type complex-double lookup-c-type = ]
48           [ drop { { double-rep f f } { double-rep f f } } ] }
49         { [ dup lookup-c-type complex-float lookup-c-type = ]
50           [ drop { { float-rep f f } { float-rep f f } } ] }
51         [ heap-size cell align cell /i { int-rep t f } <repetition> ]
52     } cond ;