aboutsummaryrefslogtreecommitdiff
path: root/abi.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2022-08-31 17:09:04 +0200
committerQuentin Carbonneaux <[email protected]>2022-10-03 10:41:03 +0200
commita9a70e30a8205a8f835c59fd8297e4a4483cc8d4 (patch)
treea4551f26f719951a2301dc248168af385f4ebc68 /abi.c
parent0b26cd4f5ecff8a01fb3f0adb902c14e043581e9 (diff)
add new target-specific abi0 pass
The general idea is to give abis a chance to talk before we've done all the optimizations. Currently, all targets eliminate {par,arg,ret}{sb,ub,...} during this pass. The forthcoming arm64_apple will, however, insert proper extensions during abi0. Moving forward abis can, for example, lower small-aggregates passing there so that memory optimizations can interact better with function calls.
Diffstat (limited to 'abi.c')
-rw-r--r--abi.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/abi.c b/abi.c
new file mode 100644
index 0000000..9c83497
--- /dev/null
+++ b/abi.c
@@ -0,0 +1,25 @@
+#include "all.h"
+
+/* eliminate sub-word abi op
+ * variants for targets that
+ * treat char/short/... as
+ * words with arbitrary high
+ * bits
+ */
+void
+elimsb(Fn *fn)
+{
+ Blk *b;
+ Ins *i;
+
+ for (b=fn->start; b; b=b->link) {
+ for (i=b->ins; i<&b->ins[b->nins]; i++) {
+ if (isargbh(i->op))
+ i->op = Oarg;
+ if (isparbh(i->op))
+ i->op = Opar;
+ }
+ if (isretbh(b->jmp.type))
+ b->jmp.type = Jretw;
+ }
+}