diff options
author | Quentin Carbonneaux <quentin@c9x.me> | 2017-04-08 21:52:09 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin@c9x.me> | 2017-04-08 22:10:01 -0400 |
commit | 5c5aaeb932d247e65ca64259ecf0873c7c5b7ad3 (patch) | |
tree | 4a6c8b9e302392ec94a38e727344edadbe3a64b2 /test | |
parent | f4ddc9e54ed589b8d168cd39ebf2a5572b32431b (diff) | |
download | roux-5c5aaeb932d247e65ca64259ecf0873c7c5b7ad3.tar.gz |
new abi test for arm64 HFAs
Diffstat (limited to 'test')
-rw-r--r-- | test/abi6.ssa | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/abi6.ssa b/test/abi6.ssa new file mode 100644 index 0000000..b90bd34 --- /dev/null +++ b/test/abi6.ssa @@ -0,0 +1,38 @@ +# test arm64's hfa + +data $dfmt = { b "double: %g\n", b 0 } + +type :hfa3 = { s, s, s } + +export +function $f(:hfa3 %h1, :hfa3 %h2, d %d1, :hfa3 %h3, d %d2) { + # the first three parameters should be in 7 registers + # the last two should be on the stack +@start + + call $phfa3(:hfa3 %h1) + call $phfa3(:hfa3 %h2) + call $phfa3(:hfa3 %h3) + call $printf(l $dfmt, d %d1) + call $printf(l $dfmt, d %d2) + ret +} + +# >>> driver +# #include <stdio.h> +# typedef struct { float f1, f2, f3; } hfa3; +# void f(hfa3, hfa3, double, hfa3, double); +# void phfa3(hfa3 h) { printf("{ %g, %g, %g }\n", h.f1, h.f2, h.f3); } +# int main() { +# hfa3 h1={1,2,3}, h2={2,3,4}, h3={3,4,5}; +# f(h1, h2, 1, h3, 2); +# } +# <<< + +# >>> output +# { 1, 2, 3 } +# { 2, 3, 4 } +# { 3, 4, 5 } +# double: 1 +# double: 2 +# <<< |