diff --git a/cranelift/filetests/isa/intel/binary64.cton b/cranelift/filetests/isa/intel/binary64.cton index fb6f62d928..47f3e72a3c 100644 --- a/cranelift/filetests/isa/intel/binary64.cton +++ b/cranelift/filetests/isa/intel/binary64.cton @@ -418,6 +418,16 @@ ebb0: ; asm: movzbq %dl, %rsi [-,%rsi] v351 = bint.i64 v301 ; bin: 48 0f b6 f2 + ; asm: call foo + call fn0() ; bin: e8 PCRel4(fn0) 00000000 + + ; asm: call *%rcx + call_indirect sig0, v1() ; bin: 40 ff d1 + ; asm: call *%rsi + call_indirect sig0, v2() ; bin: 40 ff d6 + ; asm: call *%r10 + call_indirect sig0, v3() ; bin: 41 ff d2 + ; asm: testq %rcx, %rcx ; asm: je ebb1 brz v1, ebb1 ; bin: 48 85 c9 74 1b diff --git a/lib/cretonne/meta/isa/intel/encodings.py b/lib/cretonne/meta/isa/intel/encodings.py index 3b2a91a1f2..ed0bbb433d 100644 --- a/lib/cretonne/meta/isa/intel/encodings.py +++ b/lib/cretonne/meta/isa/intel/encodings.py @@ -225,7 +225,12 @@ enc_i32_i64_ld_st(base.sload8, True, r.ldDisp32, 0x0f, 0xbe) # Call/return # I32.enc(base.call, *r.call_id(0xe8)) +I64.enc(base.call, *r.call_id(0xe8)) + I32.enc(base.call_indirect.i32, *r.call_r(0xff, rrr=2)) +I64.enc(base.call_indirect.i64, *r.call_r.rex(0xff, rrr=2)) +I64.enc(base.call_indirect.i64, *r.call_r(0xff, rrr=2)) + I32.enc(base.x_return, *r.ret(0xc3)) I64.enc(base.x_return, *r.ret(0xc3))