diff options
author | Stafford Horne <shorne@gmail.com> | 2019-06-13 21:27:09 +0900 |
---|---|---|
committer | Stafford Horne <shorne@gmail.com> | 2019-06-13 21:27:09 +0900 |
commit | 7ccbb4437a29896955a6ff3b0406b1cc2a7f6fe2 (patch) | |
tree | bd7c4ad6a0b33e2fc26cd2b817c41828c975fe0b /sim/or1k/decode.c | |
parent | 66eb1ed3882aa3c54daa2fe24b7479b5ee0538f2 (diff) | |
download | gdb-7ccbb4437a29896955a6ff3b0406b1cc2a7f6fe2.zip gdb-7ccbb4437a29896955a6ff3b0406b1cc2a7f6fe2.tar.gz gdb-7ccbb4437a29896955a6ff3b0406b1cc2a7f6fe2.tar.bz2 |
sim/or1k: Regenerate sim
This picks up changes for:
- new orfpx64a32 spec
- new unordered instructions
- documentation and symbol updates
sim/ChangeLog:
* or1k/cpu.c: Regenerate.
* or1k/cpu.h: Regenerate.
* or1k/decode.c: Regenerate.
* or1k/decode.h: Regenerate.
* or1k/model.c: Regenerate.
* or1k/sem-switch.c: Regenerate.
* or1k/sem.c: Regenerate.
Diffstat (limited to 'sim/or1k/decode.c')
-rw-r--r-- | sim/or1k/decode.c | 568 |
1 files changed, 478 insertions, 90 deletions
diff --git a/sim/or1k/decode.c b/sim/or1k/decode.c index 153e00f..779594b 100644 --- a/sim/or1k/decode.c +++ b/sim/or1k/decode.c @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2019 Free Software Foundation, Inc. This file is part of the GNU simulators. @@ -144,20 +144,49 @@ static const struct insn_sem or1k32bf_insn_sem[] = { OR1K_INSN_L_CUST7, OR1K32BF_INSN_L_CUST7, OR1K32BF_SFMT_L_MSYNC }, { OR1K_INSN_L_CUST8, OR1K32BF_INSN_L_CUST8, OR1K32BF_SFMT_L_MSYNC }, { OR1K_INSN_LF_ADD_S, OR1K32BF_INSN_LF_ADD_S, OR1K32BF_SFMT_LF_ADD_S }, + { OR1K_INSN_LF_ADD_D32, OR1K32BF_INSN_LF_ADD_D32, OR1K32BF_SFMT_LF_ADD_D32 }, { OR1K_INSN_LF_SUB_S, OR1K32BF_INSN_LF_SUB_S, OR1K32BF_SFMT_LF_ADD_S }, + { OR1K_INSN_LF_SUB_D32, OR1K32BF_INSN_LF_SUB_D32, OR1K32BF_SFMT_LF_ADD_D32 }, { OR1K_INSN_LF_MUL_S, OR1K32BF_INSN_LF_MUL_S, OR1K32BF_SFMT_LF_ADD_S }, + { OR1K_INSN_LF_MUL_D32, OR1K32BF_INSN_LF_MUL_D32, OR1K32BF_SFMT_LF_ADD_D32 }, { OR1K_INSN_LF_DIV_S, OR1K32BF_INSN_LF_DIV_S, OR1K32BF_SFMT_LF_ADD_S }, + { OR1K_INSN_LF_DIV_D32, OR1K32BF_INSN_LF_DIV_D32, OR1K32BF_SFMT_LF_ADD_D32 }, { OR1K_INSN_LF_REM_S, OR1K32BF_INSN_LF_REM_S, OR1K32BF_SFMT_LF_ADD_S }, + { OR1K_INSN_LF_REM_D32, OR1K32BF_INSN_LF_REM_D32, OR1K32BF_SFMT_LF_ADD_D32 }, { OR1K_INSN_LF_ITOF_S, OR1K32BF_INSN_LF_ITOF_S, OR1K32BF_SFMT_LF_ITOF_S }, + { OR1K_INSN_LF_ITOF_D32, OR1K32BF_INSN_LF_ITOF_D32, OR1K32BF_SFMT_LF_ITOF_D32 }, { OR1K_INSN_LF_FTOI_S, OR1K32BF_INSN_LF_FTOI_S, OR1K32BF_SFMT_LF_FTOI_S }, - { OR1K_INSN_LF_EQ_S, OR1K32BF_INSN_LF_EQ_S, OR1K32BF_SFMT_LF_EQ_S }, - { OR1K_INSN_LF_NE_S, OR1K32BF_INSN_LF_NE_S, OR1K32BF_SFMT_LF_EQ_S }, - { OR1K_INSN_LF_GE_S, OR1K32BF_INSN_LF_GE_S, OR1K32BF_SFMT_LF_EQ_S }, - { OR1K_INSN_LF_GT_S, OR1K32BF_INSN_LF_GT_S, OR1K32BF_SFMT_LF_EQ_S }, - { OR1K_INSN_LF_LT_S, OR1K32BF_INSN_LF_LT_S, OR1K32BF_SFMT_LF_EQ_S }, - { OR1K_INSN_LF_LE_S, OR1K32BF_INSN_LF_LE_S, OR1K32BF_SFMT_LF_EQ_S }, + { OR1K_INSN_LF_FTOI_D32, OR1K32BF_INSN_LF_FTOI_D32, OR1K32BF_SFMT_LF_FTOI_D32 }, + { OR1K_INSN_LF_SFEQ_S, OR1K32BF_INSN_LF_SFEQ_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFEQ_D32, OR1K32BF_INSN_LF_SFEQ_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFNE_S, OR1K32BF_INSN_LF_SFNE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFNE_D32, OR1K32BF_INSN_LF_SFNE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFGE_S, OR1K32BF_INSN_LF_SFGE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFGE_D32, OR1K32BF_INSN_LF_SFGE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFGT_S, OR1K32BF_INSN_LF_SFGT_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFGT_D32, OR1K32BF_INSN_LF_SFGT_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFLT_S, OR1K32BF_INSN_LF_SFLT_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFLT_D32, OR1K32BF_INSN_LF_SFLT_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFLE_S, OR1K32BF_INSN_LF_SFLE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFLE_D32, OR1K32BF_INSN_LF_SFLE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFUEQ_S, OR1K32BF_INSN_LF_SFUEQ_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFUEQ_D32, OR1K32BF_INSN_LF_SFUEQ_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFUNE_S, OR1K32BF_INSN_LF_SFUNE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFUNE_D32, OR1K32BF_INSN_LF_SFUNE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFUGT_S, OR1K32BF_INSN_LF_SFUGT_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFUGT_D32, OR1K32BF_INSN_LF_SFUGT_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFUGE_S, OR1K32BF_INSN_LF_SFUGE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFUGE_D32, OR1K32BF_INSN_LF_SFUGE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFULT_S, OR1K32BF_INSN_LF_SFULT_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFULT_D32, OR1K32BF_INSN_LF_SFULT_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFULE_S, OR1K32BF_INSN_LF_SFULE_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFULE_D32, OR1K32BF_INSN_LF_SFULE_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, + { OR1K_INSN_LF_SFUN_S, OR1K32BF_INSN_LF_SFUN_S, OR1K32BF_SFMT_LF_SFEQ_S }, + { OR1K_INSN_LF_SFUN_D32, OR1K32BF_INSN_LF_SFUN_D32, OR1K32BF_SFMT_LF_SFEQ_D32 }, { OR1K_INSN_LF_MADD_S, OR1K32BF_INSN_LF_MADD_S, OR1K32BF_SFMT_LF_MADD_S }, + { OR1K_INSN_LF_MADD_D32, OR1K32BF_INSN_LF_MADD_D32, OR1K32BF_SFMT_LF_MADD_D32 }, { OR1K_INSN_LF_CUST1_S, OR1K32BF_INSN_LF_CUST1_S, OR1K32BF_SFMT_L_MSYNC }, + { OR1K_INSN_LF_CUST1_D32, OR1K32BF_INSN_LF_CUST1_D32, OR1K32BF_SFMT_L_MSYNC }, }; static const struct insn_sem or1k32bf_insn_sem_invalid = @@ -235,7 +264,7 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, CGEN_INSN_WORD insn = base_insn; { - unsigned int val = (((insn >> 21) & (63 << 5)) | ((insn >> 2) & (1 << 4)) | ((insn >> 0) & (15 << 0))); + unsigned int val = (((insn >> 21) & (63 << 5)) | ((insn >> 0) & (31 << 0))); switch (val) { case 0 : /* fall through */ @@ -1083,22 +1112,7 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, case 1484 : /* fall through */ case 1485 : /* fall through */ case 1486 : /* fall through */ - case 1487 : - { - unsigned int val = (((insn >> 7) & (1 << 0))); - switch (val) - { - case 0 : - if ((entire_insn & 0xfc00ffc0) == 0xb8000000) - { itype = OR1K32BF_INSN_L_SLLI; goto extract_sfmt_l_slli; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - case 1 : - if ((entire_insn & 0xfc00ffc0) == 0xb8000080) - { itype = OR1K32BF_INSN_L_SRAI; goto extract_sfmt_l_slli; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - } - } + case 1487 : /* fall through */ case 1488 : /* fall through */ case 1489 : /* fall through */ case 1490 : /* fall through */ @@ -1116,14 +1130,22 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, case 1502 : /* fall through */ case 1503 : { - unsigned int val = (((insn >> 7) & (1 << 0))); + unsigned int val = (((insn >> 6) & (3 << 0))); switch (val) { case 0 : + if ((entire_insn & 0xfc00ffc0) == 0xb8000000) + { itype = OR1K32BF_INSN_L_SLLI; goto extract_sfmt_l_slli; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : if ((entire_insn & 0xfc00ffc0) == 0xb8000040) { itype = OR1K32BF_INSN_L_SRLI; goto extract_sfmt_l_slli; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - case 1 : + case 2 : + if ((entire_insn & 0xfc00ffc0) == 0xb8000080) + { itype = OR1K32BF_INSN_L_SRAI; goto extract_sfmt_l_slli; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 3 : if ((entire_insn & 0xfc00ffc0) == 0xb80000c0) { itype = OR1K32BF_INSN_L_RORI; goto extract_sfmt_l_slli; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; @@ -1258,9 +1280,21 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, { itype = OR1K32BF_INSN_L_MSBU; goto extract_sfmt_l_macu; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1600 : - if ((entire_insn & 0xfc0007ff) == 0xc8000000) - { itype = OR1K32BF_INSN_LF_ADD_S; goto extract_sfmt_lf_add_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (7 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xfc0007ff) == 0xc8000000) + { itype = OR1K32BF_INSN_LF_ADD_S; goto extract_sfmt_lf_add_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 7 : + if ((entire_insn & 0xffe004ff) == 0xc80000e0) + { itype = OR1K32BF_INSN_LF_CUST1_D32; goto extract_sfmt_l_msync; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1601 : if ((entire_insn & 0xfc0007ff) == 0xc8000001) { itype = OR1K32BF_INSN_LF_SUB_S; goto extract_sfmt_lf_add_s; } @@ -1290,32 +1324,248 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, { itype = OR1K32BF_INSN_LF_MADD_S; goto extract_sfmt_lf_madd_s; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1608 : - if ((entire_insn & 0xffe007ff) == 0xc8000008) - { itype = OR1K32BF_INSN_LF_EQ_S; goto extract_sfmt_lf_eq_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc8000008) + { itype = OR1K32BF_INSN_LF_SFEQ_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc8000028) + { itype = OR1K32BF_INSN_LF_SFUEQ_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1609 : - if ((entire_insn & 0xffe007ff) == 0xc8000009) - { itype = OR1K32BF_INSN_LF_NE_S; goto extract_sfmt_lf_eq_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc8000009) + { itype = OR1K32BF_INSN_LF_SFNE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc8000029) + { itype = OR1K32BF_INSN_LF_SFUNE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1610 : - if ((entire_insn & 0xffe007ff) == 0xc800000a) - { itype = OR1K32BF_INSN_LF_GT_S; goto extract_sfmt_lf_eq_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc800000a) + { itype = OR1K32BF_INSN_LF_SFGT_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc800002a) + { itype = OR1K32BF_INSN_LF_SFUGT_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1611 : - if ((entire_insn & 0xffe007ff) == 0xc800000b) - { itype = OR1K32BF_INSN_LF_GE_S; goto extract_sfmt_lf_eq_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc800000b) + { itype = OR1K32BF_INSN_LF_SFGE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc800002b) + { itype = OR1K32BF_INSN_LF_SFUGE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1612 : - if ((entire_insn & 0xffe007ff) == 0xc800000c) - { itype = OR1K32BF_INSN_LF_LT_S; goto extract_sfmt_lf_eq_s; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc800000c) + { itype = OR1K32BF_INSN_LF_SFLT_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc800002c) + { itype = OR1K32BF_INSN_LF_SFULT_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } case 1613 : - if ((entire_insn & 0xffe007ff) == 0xc800000d) - { itype = OR1K32BF_INSN_LF_LE_S; goto extract_sfmt_lf_eq_s; } + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe007ff) == 0xc800000d) + { itype = OR1K32BF_INSN_LF_SFLE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe007ff) == 0xc800002d) + { itype = OR1K32BF_INSN_LF_SFULE_S; goto extract_sfmt_lf_sfeq_s; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1614 : + if ((entire_insn & 0xffe007ff) == 0xc800002e) + { itype = OR1K32BF_INSN_LF_SFUN_S; goto extract_sfmt_lf_sfeq_s; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1616 : - if ((entire_insn & 0xffe007ff) == 0xc80000d0) - { itype = OR1K32BF_INSN_LF_CUST1_S; goto extract_sfmt_l_msync; } + { + unsigned int val = (((insn >> 6) & (3 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xfc0000ff) == 0xc8000010) + { itype = OR1K32BF_INSN_LF_ADD_D32; goto extract_sfmt_lf_add_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 3 : + if ((entire_insn & 0xffe007ff) == 0xc80000d0) + { itype = OR1K32BF_INSN_LF_CUST1_S; goto extract_sfmt_l_msync; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1617 : + if ((entire_insn & 0xfc0000ff) == 0xc8000011) + { itype = OR1K32BF_INSN_LF_SUB_D32; goto extract_sfmt_lf_add_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1618 : + if ((entire_insn & 0xfc0000ff) == 0xc8000012) + { itype = OR1K32BF_INSN_LF_MUL_D32; goto extract_sfmt_lf_add_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1619 : + if ((entire_insn & 0xfc0000ff) == 0xc8000013) + { itype = OR1K32BF_INSN_LF_DIV_D32; goto extract_sfmt_lf_add_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1620 : + if ((entire_insn & 0xfc00f9ff) == 0xc8000014) + { itype = OR1K32BF_INSN_LF_ITOF_D32; goto extract_sfmt_lf_itof_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1621 : + if ((entire_insn & 0xfc00f9ff) == 0xc8000015) + { itype = OR1K32BF_INSN_LF_FTOI_D32; goto extract_sfmt_lf_ftoi_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1622 : + if ((entire_insn & 0xfc0000ff) == 0xc8000016) + { itype = OR1K32BF_INSN_LF_REM_D32; goto extract_sfmt_lf_add_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1623 : + if ((entire_insn & 0xfc0000ff) == 0xc8000017) + { itype = OR1K32BF_INSN_LF_MADD_D32; goto extract_sfmt_lf_madd_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1624 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc8000018) + { itype = OR1K32BF_INSN_LF_SFEQ_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc8000038) + { itype = OR1K32BF_INSN_LF_SFUEQ_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1625 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc8000019) + { itype = OR1K32BF_INSN_LF_SFNE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc8000039) + { itype = OR1K32BF_INSN_LF_SFUNE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1626 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc800001a) + { itype = OR1K32BF_INSN_LF_SFGT_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc800003a) + { itype = OR1K32BF_INSN_LF_SFUGT_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1627 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc800001b) + { itype = OR1K32BF_INSN_LF_SFGE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc800003b) + { itype = OR1K32BF_INSN_LF_SFUGE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1628 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc800001c) + { itype = OR1K32BF_INSN_LF_SFLT_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc800003c) + { itype = OR1K32BF_INSN_LF_SFULT_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1629 : + { + unsigned int val = (((insn >> 5) & (1 << 0))); + switch (val) + { + case 0 : + if ((entire_insn & 0xffe004ff) == 0xc800001d) + { itype = OR1K32BF_INSN_LF_SFLE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 1 : + if ((entire_insn & 0xffe004ff) == 0xc800003d) + { itype = OR1K32BF_INSN_LF_SFULE_D32; goto extract_sfmt_lf_sfeq_d32; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + case 1630 : + if ((entire_insn & 0xffe004ff) == 0xc800003e) + { itype = OR1K32BF_INSN_LF_SFUN_D32; goto extract_sfmt_lf_sfeq_d32; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1632 : /* fall through */ case 1633 : /* fall through */ @@ -1479,7 +1729,7 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1800 : { - unsigned int val = (((insn >> 7) & (1 << 0))); + unsigned int val = (((insn >> 6) & (3 << 0))); switch (val) { case 0 : @@ -1487,9 +1737,17 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, { itype = OR1K32BF_INSN_L_SLL; goto extract_sfmt_l_sll; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1 : + if ((entire_insn & 0xfc0007ff) == 0xe0000048) + { itype = OR1K32BF_INSN_L_SRL; goto extract_sfmt_l_sll; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 2 : if ((entire_insn & 0xfc0007ff) == 0xe0000088) { itype = OR1K32BF_INSN_L_SRA; goto extract_sfmt_l_sll; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 3 : + if ((entire_insn & 0xfc0007ff) == 0xe00000c8) + { itype = OR1K32BF_INSN_L_ROR; goto extract_sfmt_l_sll; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; } } @@ -1507,7 +1765,7 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1804 : { - unsigned int val = (((insn >> 7) & (1 << 0))); + unsigned int val = (((insn >> 6) & (3 << 0))); switch (val) { case 0 : @@ -1515,22 +1773,34 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, { itype = OR1K32BF_INSN_L_EXTHS; goto extract_sfmt_l_exths; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1 : + if ((entire_insn & 0xfc00ffff) == 0xe000004c) + { itype = OR1K32BF_INSN_L_EXTBS; goto extract_sfmt_l_exths; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 2 : if ((entire_insn & 0xfc00ffff) == 0xe000008c) { itype = OR1K32BF_INSN_L_EXTHZ; goto extract_sfmt_l_exths; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 3 : + if ((entire_insn & 0xfc00ffff) == 0xe00000cc) + { itype = OR1K32BF_INSN_L_EXTBZ; goto extract_sfmt_l_exths; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; } } case 1805 : { - unsigned int val = (((insn >> 8) & (3 << 0))); + unsigned int val = (((insn >> 7) & (3 << 1)) | ((insn >> 6) & (1 << 0))); switch (val) { case 0 : if ((entire_insn & 0xfc00ffff) == 0xe000000d) { itype = OR1K32BF_INSN_L_EXTWS; goto extract_sfmt_l_exths; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - case 3 : + case 1 : + if ((entire_insn & 0xfc00ffff) == 0xe000004d) + { itype = OR1K32BF_INSN_L_EXTWZ; goto extract_sfmt_l_exths; } + itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; + case 6 : if ((entire_insn & 0xffe007ff) == 0xe000030d) { itype = OR1K32BF_INSN_L_MULDU; goto extract_sfmt_l_muld; } itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; @@ -1557,42 +1827,6 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; } } - case 1816 : - { - unsigned int val = (((insn >> 7) & (1 << 0))); - switch (val) - { - case 0 : - if ((entire_insn & 0xfc0007ff) == 0xe0000048) - { itype = OR1K32BF_INSN_L_SRL; goto extract_sfmt_l_sll; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - case 1 : - if ((entire_insn & 0xfc0007ff) == 0xe00000c8) - { itype = OR1K32BF_INSN_L_ROR; goto extract_sfmt_l_sll; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - } - } - case 1820 : - { - unsigned int val = (((insn >> 7) & (1 << 0))); - switch (val) - { - case 0 : - if ((entire_insn & 0xfc00ffff) == 0xe000004c) - { itype = OR1K32BF_INSN_L_EXTBS; goto extract_sfmt_l_exths; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - case 1 : - if ((entire_insn & 0xfc00ffff) == 0xe00000cc) - { itype = OR1K32BF_INSN_L_EXTBZ; goto extract_sfmt_l_exths; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - default : itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; - } - } - case 1821 : - if ((entire_insn & 0xfc00ffff) == 0xe000004d) - { itype = OR1K32BF_INSN_L_EXTWZ; goto extract_sfmt_l_exths; } - itype = OR1K32BF_INSN_X_INVALID; goto extract_sfmt_empty; case 1824 : { unsigned int val = (((insn >> 21) & (15 << 0))); @@ -2686,6 +2920,41 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, return idesc; } + extract_sfmt_lf_add_d32: + { + const IDESC *idesc = &or1k32bf_insn_data[itype]; + CGEN_INSN_WORD insn = entire_insn; +#define FLD(f) abuf->fields.sfmt_lf_add_d32.f + UINT f_r1; + UINT f_r2; + UINT f_r3; + UINT f_rdoff_10_1; + UINT f_raoff_9_1; + UINT f_rboff_8_1; + SI f_rdd32; + SI f_rad32; + SI f_rbd32; + + f_r1 = EXTRACT_LSB0_UINT (insn, 32, 25, 5); + f_r2 = EXTRACT_LSB0_UINT (insn, 32, 20, 5); + f_r3 = EXTRACT_LSB0_UINT (insn, 32, 15, 5); + f_rdoff_10_1 = EXTRACT_LSB0_UINT (insn, 32, 10, 1); + f_raoff_9_1 = EXTRACT_LSB0_UINT (insn, 32, 9, 1); + f_rboff_8_1 = EXTRACT_LSB0_UINT (insn, 32, 8, 1); + f_rdd32 = ((f_r1) | (((f_rdoff_10_1) << (5)))); + f_rad32 = ((f_r2) | (((f_raoff_9_1) << (5)))); + f_rbd32 = ((f_r3) | (((f_rboff_8_1) << (5)))); + + /* Record the fields for the semantic handler. */ + FLD (f_rad32) = f_rad32; + FLD (f_rbd32) = f_rbd32; + FLD (f_rdd32) = f_rdd32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_add_d32", "f_rad32 0x%x", 'x', f_rad32, "f_rbd32 0x%x", 'x', f_rbd32, "f_rdd32 0x%x", 'x', f_rdd32, (char *) 0)); + +#undef FLD + return idesc; + } + extract_sfmt_lf_itof_s: { const IDESC *idesc = &or1k32bf_insn_data[itype]; @@ -2706,6 +2975,34 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, return idesc; } + extract_sfmt_lf_itof_d32: + { + const IDESC *idesc = &or1k32bf_insn_data[itype]; + CGEN_INSN_WORD insn = entire_insn; +#define FLD(f) abuf->fields.sfmt_lf_add_d32.f + UINT f_r1; + UINT f_r2; + UINT f_rdoff_10_1; + UINT f_raoff_9_1; + SI f_rdd32; + SI f_rad32; + + f_r1 = EXTRACT_LSB0_UINT (insn, 32, 25, 5); + f_r2 = EXTRACT_LSB0_UINT (insn, 32, 20, 5); + f_rdoff_10_1 = EXTRACT_LSB0_UINT (insn, 32, 10, 1); + f_raoff_9_1 = EXTRACT_LSB0_UINT (insn, 32, 9, 1); + f_rdd32 = ((f_r1) | (((f_rdoff_10_1) << (5)))); + f_rad32 = ((f_r2) | (((f_raoff_9_1) << (5)))); + + /* Record the fields for the semantic handler. */ + FLD (f_rad32) = f_rad32; + FLD (f_rdd32) = f_rdd32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_itof_d32", "f_rad32 0x%x", 'x', f_rad32, "f_rdd32 0x%x", 'x', f_rdd32, (char *) 0)); + +#undef FLD + return idesc; + } + extract_sfmt_lf_ftoi_s: { const IDESC *idesc = &or1k32bf_insn_data[itype]; @@ -2726,7 +3023,35 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, return idesc; } - extract_sfmt_lf_eq_s: + extract_sfmt_lf_ftoi_d32: + { + const IDESC *idesc = &or1k32bf_insn_data[itype]; + CGEN_INSN_WORD insn = entire_insn; +#define FLD(f) abuf->fields.sfmt_lf_add_d32.f + UINT f_r1; + UINT f_r2; + UINT f_rdoff_10_1; + UINT f_raoff_9_1; + SI f_rdd32; + SI f_rad32; + + f_r1 = EXTRACT_LSB0_UINT (insn, 32, 25, 5); + f_r2 = EXTRACT_LSB0_UINT (insn, 32, 20, 5); + f_rdoff_10_1 = EXTRACT_LSB0_UINT (insn, 32, 10, 1); + f_raoff_9_1 = EXTRACT_LSB0_UINT (insn, 32, 9, 1); + f_rdd32 = ((f_r1) | (((f_rdoff_10_1) << (5)))); + f_rad32 = ((f_r2) | (((f_raoff_9_1) << (5)))); + + /* Record the fields for the semantic handler. */ + FLD (f_rad32) = f_rad32; + FLD (f_rdd32) = f_rdd32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_ftoi_d32", "f_rad32 0x%x", 'x', f_rad32, "f_rdd32 0x%x", 'x', f_rdd32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_lf_sfeq_s: { const IDESC *idesc = &or1k32bf_insn_data[itype]; CGEN_INSN_WORD insn = entire_insn; @@ -2740,7 +3065,35 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, /* Record the fields for the semantic handler. */ FLD (f_r2) = f_r2; FLD (f_r3) = f_r3; - TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_eq_s", "f_r2 0x%x", 'x', f_r2, "f_r3 0x%x", 'x', f_r3, (char *) 0)); + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_sfeq_s", "f_r2 0x%x", 'x', f_r2, "f_r3 0x%x", 'x', f_r3, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_lf_sfeq_d32: + { + const IDESC *idesc = &or1k32bf_insn_data[itype]; + CGEN_INSN_WORD insn = entire_insn; +#define FLD(f) abuf->fields.sfmt_lf_add_d32.f + UINT f_r2; + UINT f_r3; + UINT f_raoff_9_1; + UINT f_rboff_8_1; + SI f_rad32; + SI f_rbd32; + + f_r2 = EXTRACT_LSB0_UINT (insn, 32, 20, 5); + f_r3 = EXTRACT_LSB0_UINT (insn, 32, 15, 5); + f_raoff_9_1 = EXTRACT_LSB0_UINT (insn, 32, 9, 1); + f_rboff_8_1 = EXTRACT_LSB0_UINT (insn, 32, 8, 1); + f_rad32 = ((f_r2) | (((f_raoff_9_1) << (5)))); + f_rbd32 = ((f_r3) | (((f_rboff_8_1) << (5)))); + + /* Record the fields for the semantic handler. */ + FLD (f_rad32) = f_rad32; + FLD (f_rbd32) = f_rbd32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_sfeq_d32", "f_rad32 0x%x", 'x', f_rad32, "f_rbd32 0x%x", 'x', f_rbd32, (char *) 0)); #undef FLD return idesc; @@ -2769,4 +3122,39 @@ or1k32bf_decode (SIM_CPU *current_cpu, IADDR pc, return idesc; } + extract_sfmt_lf_madd_d32: + { + const IDESC *idesc = &or1k32bf_insn_data[itype]; + CGEN_INSN_WORD insn = entire_insn; +#define FLD(f) abuf->fields.sfmt_lf_add_d32.f + UINT f_r1; + UINT f_r2; + UINT f_r3; + UINT f_rdoff_10_1; + UINT f_raoff_9_1; + UINT f_rboff_8_1; + SI f_rdd32; + SI f_rad32; + SI f_rbd32; + + f_r1 = EXTRACT_LSB0_UINT (insn, 32, 25, 5); + f_r2 = EXTRACT_LSB0_UINT (insn, 32, 20, 5); + f_r3 = EXTRACT_LSB0_UINT (insn, 32, 15, 5); + f_rdoff_10_1 = EXTRACT_LSB0_UINT (insn, 32, 10, 1); + f_raoff_9_1 = EXTRACT_LSB0_UINT (insn, 32, 9, 1); + f_rboff_8_1 = EXTRACT_LSB0_UINT (insn, 32, 8, 1); + f_rdd32 = ((f_r1) | (((f_rdoff_10_1) << (5)))); + f_rad32 = ((f_r2) | (((f_raoff_9_1) << (5)))); + f_rbd32 = ((f_r3) | (((f_rboff_8_1) << (5)))); + + /* Record the fields for the semantic handler. */ + FLD (f_rad32) = f_rad32; + FLD (f_rbd32) = f_rbd32; + FLD (f_rdd32) = f_rdd32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lf_madd_d32", "f_rad32 0x%x", 'x', f_rad32, "f_rbd32 0x%x", 'x', f_rbd32, "f_rdd32 0x%x", 'x', f_rdd32, (char *) 0)); + +#undef FLD + return idesc; + } + } |