diff options
author | Marcel Moolenaar <marcel@FreeBSD.org> | 2006-06-24 01:19:52 +0000 |
---|---|---|
committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2006-06-24 01:19:52 +0000 |
commit | a4b606cd184c11641f54687d8f362a9b8fd81bee (patch) | |
tree | b7b8e33f055851e858a2dab4465fb24a46122b92 /sys/ia64/disasm/disasm_extract.c | |
parent | 39a0c069fa41c8e873c3905a2a69716ec164f719 (diff) |
Notes
Diffstat (limited to 'sys/ia64/disasm/disasm_extract.c')
-rw-r--r-- | sys/ia64/disasm/disasm_extract.c | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/sys/ia64/disasm/disasm_extract.c b/sys/ia64/disasm/disasm_extract.c index 6321ea03027c4..61604f94b23b6 100644 --- a/sys/ia64/disasm/disasm_extract.c +++ b/sys/ia64/disasm/disasm_extract.c @@ -817,6 +817,26 @@ asm_normalize(struct asm_inst *i, enum asm_op op) asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_SIG); op = ASM_OP_GETF; break; + case ASM_OP_HINT_B: + asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); + op = ASM_OP_HINT; + break; + case ASM_OP_HINT_F: + asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); + op = ASM_OP_HINT; + break; + case ASM_OP_HINT_I: + asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); + op = ASM_OP_HINT; + break; + case ASM_OP_HINT_M: + asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); + op = ASM_OP_HINT; + break; + case ASM_OP_HINT_X: + asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); + op = ASM_OP_HINT; + break; case ASM_OP_INVALA_: asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_NONE); op = ASM_OP_INVALA; @@ -2058,6 +2078,9 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, case ASM_FMT_F15: /* 0 dst */ u_imm(i, 1, bits, 6, 20); break; + case ASM_FMT_F16: /* 0 dst */ + u_imm(i, 1, bits, 6, 20); + break; case ASM_FMT_I1: operand(i, 1, ASM_OPER_GREG, bits, 6, 7); operand(i, 2, ASM_OPER_GREG, bits, 13, 7); @@ -2161,6 +2184,9 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, operand(i, 3, ASM_OPER_GREG, bits, 20, 7); i->i_srcidx++; break; + case ASM_FMT_I18: + u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); + break; case ASM_FMT_I19: u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); break; @@ -2314,8 +2340,7 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, s_immf(i, 2, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); i->i_srcidx--; break; - case ASM_FMT_M16: { - int oper; + case ASM_FMT_M16: asm_hint(i, ASM_CC_LDHINT); operand(i, 1, ASM_OPER_GREG, bits, 6, 7); operand(i, 2, ASM_OPER_MEM, bits, 20, 7); @@ -2323,15 +2348,15 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, if (i->i_op == ASM_OP_CMP8XCHG16) { op_type(i, 4, ASM_OPER_AREG); op_value(i, 4, AR_CSD); - oper = 5; - } else - oper = 4; - if (FIELD(bits, 30, 6) < 8) { - op_type(i, oper, ASM_OPER_AREG); - op_value(i, oper, AR_CCV); + op_type(i, 5, ASM_OPER_AREG); + op_value(i, 5, AR_CCV); + } else { + if (FIELD(bits, 30, 6) < 8) { + op_type(i, 4, ASM_OPER_AREG); + op_value(i, 4, AR_CCV); + } } break; - } case ASM_FMT_M17: asm_hint(i, ASM_CC_LDHINT); operand(i, 1, ASM_OPER_GREG, bits, 6, 7); @@ -2478,6 +2503,12 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, operand(i, 1, ASM_OPER_GREG, bits, 6, 7); operand(i, 2, ASM_OPER_GREG, bits, 20, 7); break; + case ASM_FMT_M47: + operand(i, 1, ASM_OPER_GREG, bits, 20, 7); + break; + case ASM_FMT_M48: + u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); + break; case ASM_FMT_X1: KASSERT(slot == 2, ("foo")); u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); @@ -2510,6 +2541,11 @@ asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, i->i_oper[2].o_value <<= 4; i->i_oper[2].o_type = ASM_OPER_DISP; break; + case ASM_FMT_X5: + KASSERT(slot == 2, ("foo")); + u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); + combine(&i->i_oper[1].o_value, 21, b->b_inst[1].i_bits, 41, 0); + break; default: KASSERT(fmt == ASM_FMT_NONE, ("foo")); return (0); |