# ia64 cpu description file
#
# The instruction lengths are very conservative, it doesn't matter on ia64
# since there are no short branches.
#

label: len:0
break: len:48
jmp: len:128
br: len:48
throw: src1:i len:96
rethrow: src1:i len:48
ckfinite: dest:f src1:f len:48
ceq: dest:c len:48
cgt: dest:c len:48
cgt.un: dest:c len:48
clt: dest:c len:48
clt.un: dest:c len:48
localloc: dest:i src1:i len:92
compare: src1:i src2:i len:48
lcompare: src1:i src2:i len:48
icompare: src1:i src2:i len:48
compare_imm: src1:i len:48
icompare_imm: src1:i len:48
fcompare: src1:f src2:f clob:a len:48
oparglist: src1:b len:48
setlret: dest:r src1:i src2:i len:48
checkthis: src1:b len:48
call: dest:r clob:c len:80
voidcall: clob:c len:80
voidcall_reg: src1:i clob:c len:80
voidcall_membase: src1:b clob:c len:80
fcall: dest:g len:80 clob:c
fcall_reg: dest:g src1:i len:80 clob:c
fcall_membase: dest:g src1:b len:80 clob:c
lcall: dest:r len:80 clob:c
lcall_reg: dest:r src1:i len:80 clob:c
lcall_membase: dest:r src1:b len:80 clob:c
vcall: len:80 clob:c
vcall_reg: src1:i len:80 clob:c
vcall_membase: src1:b len:80 clob:c
call_reg: dest:r src1:i len:80 clob:c
call_membase: dest:r src1:b len:80 clob:c
iconst: dest:i len:48
i8const: dest:i len:48
r4const: dest:f len:48
r8const: dest:f len:48
store_membase_imm: dest:b len:48
store_membase_reg: dest:b src1:i len:48
storei8_membase_reg: dest:b src1:i len:48
storei1_membase_imm: dest:b len:48
storei1_membase_reg: dest:b src1:c len:48
storei2_membase_imm: dest:b len:48
storei2_membase_reg: dest:b src1:i len:48
storei4_membase_imm: dest:b len:48
storei4_membase_reg: dest:b src1:i len:48
storei8_membase_imm: dest:b len:48
storer4_membase_reg: dest:b src1:f len:48
storer8_membase_reg: dest:b src1:f len:48
load_membase: dest:i src1:b len:48
loadi1_membase: dest:c src1:b len:48
loadu1_membase: dest:c src1:b len:48
loadi2_membase: dest:i src1:b len:48
loadu2_membase: dest:i src1:b len:48
loadi4_membase: dest:i src1:b len:48
loadu4_membase: dest:i src1:b len:48
loadi8_membase: dest:i src1:b len:48
loadr4_membase: dest:f src1:b len:48
loadr8_membase: dest:f src1:b len:48
loadu4_mem: dest:i len:48
move: dest:i src1:i len:48
add_imm: dest:i src1:i len:48
sub_imm: dest:i src1:i len:48
mul_imm: dest:i src1:i len:48
# there is no actual support for division or reminder by immediate
# we simulate them, though (but we need to change the burg rules 
# to allocate a symbolic reg for src2)
div_imm: dest:a src1:i src2:i len:48 clob:d
div_un_imm: dest:a src1:i src2:i len:48 clob:d
rem_imm: dest:d src1:i src2:i len:48 clob:a
rem_un_imm: dest:d src1:i src2:i len:48 clob:a
and_imm: dest:i src1:i len:48
or_imm: dest:i src1:i len:48
xor_imm: dest:i src1:i len:48
shl_imm: dest:i src1:i len:48
shr_imm: dest:i src1:i len:48
shr_un_imm: dest:i src1:i len:48
cond_exc_eq: len:48
cond_exc_ne_un: len:48
cond_exc_lt: len:48
cond_exc_lt_un: len:48
cond_exc_gt: len:48
cond_exc_gt_un: len:48
cond_exc_ge: len:48
cond_exc_ge_un: len:48
cond_exc_le: len:48
cond_exc_le_un: len:48
cond_exc_ov: len:48
cond_exc_no: len:48
cond_exc_c: len:48
cond_exc_nc: len:48
cond_exc_iov: len:48
cond_exc_ic: len:48
float_beq: len:48
float_bne_un: len:48
float_blt: len:48
float_blt_un: len:48
float_bgt: len:48
float_bgt_un: len:48
float_bge: len:48
float_bge_un: len:48
float_ble: len:48
float_ble_un: len:48
float_add: dest:f src1:f src2:f len:48
float_sub: dest:f src1:f src2:f len:48
float_mul: dest:f src1:f src2:f len:48
float_div: dest:f src1:f src2:f len:48
float_div_un: dest:f src1:f src2:f len:48
float_rem: dest:f src1:f src2:f len:48
float_rem_un: dest:f src1:f src2:f len:48
float_neg: dest:f src1:f len:48
float_not: dest:f src1:f len:48
float_conv_to_i1: dest:i src1:f len:112
float_conv_to_i2: dest:i src1:f len:112
float_conv_to_i4: dest:i src1:f len:112
float_conv_to_i8: dest:i src1:f len:112
float_conv_to_r4: dest:f src1:f len:112
float_conv_to_r8: dest:f src1:f len:112
float_conv_to_u4: dest:i src1:f len:112
float_conv_to_u8: dest:i src1:f len:112
float_conv_to_u2: dest:i src1:f len:112
float_conv_to_u1: dest:i src1:f len:112
float_conv_to_i: dest:i src1:f len:112
float_conv_to_ovf_i: dest:a src1:f len:112
float_conv_to_ovd_u: dest:a src1:f len:112
float_mul_ovf: 
float_ceq: dest:i src1:f src2:f len:48
float_cgt: dest:i src1:f src2:f len:48
float_cgt_un: dest:i src1:f src2:f len:48
float_clt: dest:i src1:f src2:f len:48
float_clt_un: dest:i src1:f src2:f len:48
float_ceq_membase: dest:i src1:f src2:b len:48
float_cgt_membase: dest:i src1:f src2:b len:48
float_cgt_un_membase: dest:i src1:f src2:b len:48
float_clt_membase: dest:i src1:f src2:b len:48
float_clt_un_membase: dest:i src1:f src2:b len:48
float_conv_to_u: dest:i src1:f len:48
fmove: dest:f src1:f len:48
call_handler: len:96 clob:c
start_handler: len:96
endfilter: len:96
endfinally: len:96
aot_const: dest:i len:48
tls_get: dest:i len:48
atomic_add_i4: src1:b src2:i dest:i len:48
atomic_add_i8: src1:b src2:i dest:i len:48
atomic_exchange_i4: src1:b src2:i dest:i len:48
atomic_exchange_i8: src1:b src2:i dest:i len:48
memory_barrier: len:48
atomic_add_imm_i4: src1:b dest:i len:48
atomic_add_imm_i8: src1:b dest:i len:48
adc: dest:i src1:i src2:i len:48
addcc: dest:i src1:i src2:i len:48
subcc: dest:i src1:i src2:i len:48
adc_imm: dest:i src1:i len:48
sbb: dest:i src1:i src2:i len:48
sbb_imm: dest:i src1:i len:48
br_reg: src1:i len:48
sin: dest:f src1:f len:48
cos: dest:f src1:f len:48
abs: dest:f src1:f len:48
tan: dest:f src1:f len:48
atan: dest:f src1:f len:48
sqrt: dest:f src1:f len:48
bigmul: len:48 dest:i src1:a src2:i
bigmul_un: len:48 dest:i src1:a src2:i
sext_i1: dest:i src1:i len:48
sext_i2: dest:i src1:i len:48
sext_i4: dest:i src1:i len:48
zext_i1: dest:i src1:i len:48
zext_i2: dest:i src1:i len:48
zext_i4: dest:i src1:i len:48

# 32 bit opcodes
int_add: dest:i src1:i src2:i len:48
int_sub: dest:i src1:i src2:i len:48
int_mul: dest:i src1:i src2:i len:48
int_mul_ovf: dest:i src1:i src2:i len:48
int_mul_ovf_un: dest:i src1:i src2:i len:48
int_div: dest:a src1:a src2:i clob:d len:48
int_div_un: dest:a src1:a src2:i clob:d len:48
int_rem: dest:d src1:a src2:i clob:a len:48
int_rem_un: dest:d src1:a src2:i clob:a len:48
int_and: dest:i src1:i src2:i len:48
int_or: dest:i src1:i src2:i len:48
int_xor: dest:i src1:i src2:i len:48
int_shl: dest:i src1:i src2:s len:48
int_shr: dest:i src1:i src2:s len:48
int_shr_un: dest:i src1:i src2:s len:48
int_adc: dest:i src1:i src2:i len:48
int_adc_imm: dest:i src1:i len:48
int_sbb: dest:i src1:i src2:i len:48
int_sbb_imm: dest:i src1:i len:48
int_addcc: dest:i src1:i src2:i len:96
int_subcc: dest:i src1:i src2:i len:96
int_add_imm: dest:i src1:i len:48
int_sub_imm: dest:i src1:i len:48
int_mul_imm: dest:i src1:i len:48
int_div_imm: dest:a src1:i clob:d len:48
int_div_un_imm: dest:a src1:i clob:d len:48
int_rem_imm: dest:d src1:i clob:a len:48
int_rem_un_imm: dest:d src1:i clob:a len:48
int_and_imm: dest:i src1:i len:48
int_or_imm: dest:i src1:i len:48
int_xor_imm: dest:i src1:i len:48
int_shl_imm: dest:i src1:i len:48
int_shr_imm: dest:i src1:i len:48
int_shr_un_imm: dest:i src1:i len:48
int_neg: dest:i src1:i len:48
int_not: dest:i src1:i len:48
int_ceq: dest:c len:48
int_cgt: dest:c len:48
int_cgt_un: dest:c len:48
int_clt: dest:c len:48
int_clt_un: dest:c len:48
int_beq: len:48
int_bne_un: len:48
int_blt: len:48
int_blt_un: len:48
int_bgt: len:48
int_bgt_un: len:48
int_bge: len:48
int_bge_un: len:48
int_ble: len:48
int_ble_un: len:48
int_conv_to_r4: dest:f src1:i len:112
int_conv_to_r8: dest:f src1:i len:112

# 64 bit opcodes
long_add: dest:i src1:i src2:i len:48
long_sub: dest:i src1:i src2:i len:48
long_mul: dest:i src1:i src2:i len:48
long_div: dest:a src1:a src2:i len:48 clob:d
long_div_un: dest:a src1:a src2:i len:48 clob:d
long_rem: dest:d src1:a src2:i len:48 clob:a
long_rem_un: dest:d src1:a src2:i len:48 clob:a
long_and: dest:i src1:i src2:i len:48
long_or: dest:i src1:i src2:i len:48
long_xor: dest:i src1:i src2:i len:48
long_shl: dest:i src1:i src2:s len:48
long_shr: dest:i src1:i src2:s len:48
long_shr_un: dest:i src1:i src2:s len:48
long_neg: dest:i src1:i len:48
long_not: dest:i src1:i len:48
long_conv_to_i1: dest:i src1:i len:48
long_conv_to_i2: dest:i src1:i len:48
long_conv_to_i4: dest:i src1:i len:48
long_conv_to_i8: dest:i src1:i len:48
long_conv_to_r4: dest:f src1:i len:112
long_conv_to_r8: dest:f src1:i len:112
long_conv_to_u4: dest:i src1:i len:112
long_conv_to_u8: dest:i src1:i len:112
long_conv_to_r_un: dest:f src1:i len:48
long_conv_to_ovf_i: dest:i src1:i src2:i len:48
long_conv_to_ovf_i4_un: dest:i src1:i len:96
long_conv_to_ovf_u4: dest:i src1:i len:48
long_conv_to_u2: dest:i src1:i len:48
long_conv_to_u1: dest:i src1:i len:48
long_conv_to_i: dest:i src1:i len:48

long_mul_imm: dest:i src1:i src2:i len:48
long_mul_ovf: dest:i src1:i src2:i len:48
long_mul_ovf_un: dest:i src1:i src2:i len:48
long_shr_imm: dest:i src1:i len:48
long_shr_un_imm: dest:i src1:i len:48
long_shl_imm: dest:i src1:i len:48

long_beq: len:48
long_bge: len:48
long_bgt: len:48
long_ble: len:48
long_blt: len:48
long_bne_un: len:48
long_bge_un: len:48
long_bgt_un: len:48
long_ble_un: len:48
long_blt_un: len:48

ia64_cmp4_eq: src1:i src2:i len:48
ia64_cmp4_ne: src1:i src2:i len:48
ia64_cmp4_le: src1:i src2:i len:48
ia64_cmp4_lt: src1:i src2:i len:48
ia64_cmp4_ge: src1:i src2:i len:48
ia64_cmp4_gt: src1:i src2:i len:48
ia64_cmp4_le_un: src1:i src2:i len:48
ia64_cmp4_lt_un: src1:i src2:i len:48
ia64_cmp4_ge_un: src1:i src2:i len:48
ia64_cmp4_gt_un: src1:i src2:i len:48
ia64_cmp_eq: src1:i src2:i len:48
ia64_cmp_ne: src1:i src2:i len:48
ia64_cmp_le: src1:i src2:i len:48
ia64_cmp_lt: src1:i src2:i len:48
ia64_cmp_ge: src1:i src2:i len:48
ia64_cmp_gt: src1:i src2:i len:48
ia64_cmp_lt_un: src1:i src2:i len:48
ia64_cmp_gt_un: src1:i src2:i len:48
ia64_cmp_le_un: src1:i src2:i len:48
ia64_cmp_ge_un: src1:i src2:i len:48

ia64_cmp4_eq_imm: src2:i len:48
ia64_cmp4_ne_imm: src2:i len:48
ia64_cmp4_le_imm: src2:i len:48
ia64_cmp4_lt_imm: src2:i len:48
ia64_cmp4_ge_imm: src2:i len:48
ia64_cmp4_gt_imm: src2:i len:48
ia64_cmp4_le_un_imm: src2:i len:48
ia64_cmp4_lt_un_imm: src2:i len:48
ia64_cmp4_ge_un_imm: src2:i len:48
ia64_cmp4_gt_un_imm: src2:i len:48
ia64_cmp_eq_imm: src2:i len:48
ia64_cmp_ne_imm: src2:i len:48
ia64_cmp_le_imm: src2:i len:48
ia64_cmp_lt_imm: src2:i len:48
ia64_cmp_ge_imm: src2:i len:48
ia64_cmp_gt_imm: src2:i len:48
ia64_cmp_lt_un_imm: src2:i len:48
ia64_cmp_gt_un_imm: src2:i len:48
ia64_cmp_le_un_imm: src2:i len:48
ia64_cmp_ge_un_imm: src2:i len:48

ia64_fcmp_eq: src1:f src2:f len:48
ia64_fcmp_ne: src1:f src2:f len:48
ia64_fcmp_le: src1:f src2:f len:48
ia64_fcmp_lt: src1:f src2:f len:48
ia64_fcmp_ge: src1:f src2:f len:48
ia64_fcmp_gt: src1:f src2:f len:48
ia64_fcmp_lt_un: src1:f src2:f len:96
ia64_fcmp_gt_un: src1:f src2:f len:96
ia64_fcmp_le_un: src1:f src2:f len:96
ia64_fcmp_ge_un: src1:f src2:f len:96

ia64_br_cond: len:48
ia64_cond_exc: len:48
ia64_cset: dest:i len:48

ia64_storei8_membase_inc_reg: dest:b src1:i len:48
ia64_storei1_membase_inc_reg: dest:b src1:c len:48
ia64_storei2_membase_inc_reg: dest:b src1:i len:48
ia64_storei4_membase_inc_reg: dest:b src1:i len:48
ia64_storer4_membase_inc_reg: dest:b src1:f len:48
ia64_storer8_membase_inc_reg: dest:b src1:f len:48
# 'b' tells the register allocator to avoid allocating sreg1 and dreg to the
# same physical register
ia64_loadi1_membase_inc: dest:b src1:i len:48
ia64_loadu1_membase_inc: dest:b src1:i len:48
ia64_loadi2_membase_inc: dest:b src1:i len:48
ia64_loadu2_membase_inc: dest:b src1:i len:48
ia64_loadi4_membase_inc: dest:b src1:i len:48
ia64_loadu4_membase_inc: dest:b src1:i len:48
ia64_loadi8_membase_inc: dest:b src1:i len:48
ia64_loadr4_membase_inc: dest:b src1:i len:48
ia64_loadr8_membase_inc: dest:b src1:i len:48

relaxed_nop: len:0

# Linear IR opcodes
nop: len:0
dummy_use: src1:i len:0
dummy_store: len:0
not_reached: len:0
not_null: src1:i len:0

jump_table: dest:i len:48

localloc_imm: dest:i len:92

vcall2: len:80 clob:c
vcall2_reg: src1:i len:80 clob:c
vcall2_membase: src1:b len:80 clob:c

int_conv_to_i1: dest:i src1:i len:48
int_conv_to_u1: dest:i src1:i len:48
int_conv_to_i2: dest:i src1:i len:48
int_conv_to_u2: dest:i src1:i len:48
int_conv_to_i4: dest:i src1:i len:48
int_conv_to_u4: dest:i src1:i len:48
int_conv_to_i8: dest:i src1:i len:48
int_conv_to_u8: dest:i src1:i len:48

long_add_imm: dest:i src1:i len:48
long_sub_imm: dest:i src1:i len:48
long_and_imm: dest:i src1:i len:48
long_or_imm: dest:i src1:i len:48
long_xor_imm: dest:i src1:i len:48

