diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-21 19:28:10 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-21 19:28:10 -0400 |
commit | ff607f1a1e4d8f15adb075e427b4b9ea0ad34c03 (patch) | |
tree | 4fa18f52970909a30e8fa6836da5a53b65cf2143 /lisc | |
parent | fb0803ec1301575bb334a1199da0c88e95364333 (diff) | |
download | roux-ff607f1a1e4d8f15adb075e427b4b9ea0ad34c03.tar.gz |
emit syntactically valid calls
Diffstat (limited to 'lisc')
-rw-r--r-- | lisc/emit.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lisc/emit.c b/lisc/emit.c index ad46289..820e2c4 100644 --- a/lisc/emit.c +++ b/lisc/emit.c @@ -224,7 +224,16 @@ eins(Ins i, Fn *fn, FILE *f) i.wide, i.arg[0], i.to); break; case OCall: - emitf(fn, f, "call%w %R", 1, i.arg[0]); + switch (rtype(i.arg[0])) { + default: + diag("emit: invalid call instruction"); + case RCon: + emitf(fn, f, "callq %M", i.arg[0]); + break; + case RTmp: + emitf(fn, f, "call%w *%R", 1, i.arg[0]); + break; + } break; case OAddr: emitf(fn, f, "lea%w %M, %R", i.wide, i.arg[0], i.to); |