diff options
author | Jeff Law <jeffreyalaw@gmail.com> | 2021-07-06 10:55:53 -0400 |
---|---|---|
committer | Jeff Law <jeffreyalaw@gmail.com> | 2021-07-06 10:55:53 -0400 |
commit | 73c49ff53235d92aba4ee748fcb06b06e83e0b8f (patch) | |
tree | b8191681cc174a7153e61b5c38cf66d6f67c710b /gcc/config/h8300 | |
parent | 5db3ea9d748f00e55ddcb72d0720526824eeb4a9 (diff) | |
download | gcc-73c49ff53235d92aba4ee748fcb06b06e83e0b8f.zip gcc-73c49ff53235d92aba4ee748fcb06b06e83e0b8f.tar.gz gcc-73c49ff53235d92aba4ee748fcb06b06e83e0b8f.tar.bz2 |
Use H8 nop moves as tst insns
gcc
* config/h8300/jumpcall.md (*branch): When possible, generate
the comparison in CCZN mode.
* config/h8300/predicates.md (simple_memory_operand): Reject all
auto-increment addressing modes.
Diffstat (limited to 'gcc/config/h8300')
-rw-r--r-- | gcc/config/h8300/jumpcall.md | 27 | ||||
-rw-r--r-- | gcc/config/h8300/predicates.md | 2 |
2 files changed, 25 insertions, 4 deletions
diff --git a/gcc/config/h8300/jumpcall.md b/gcc/config/h8300/jumpcall.md index 7b6a66a..e1f0418 100644 --- a/gcc/config/h8300/jumpcall.md +++ b/gcc/config/h8300/jumpcall.md @@ -23,13 +23,32 @@ "" "#" "&& reload_completed" - [(set (reg:H8cc CC_REG) - (compare:H8cc (match_dup 1) (match_dup 2))) + [(set (match_dup 4) + (match_dup 5)) (set (pc) (if_then_else (match_op_dup 0 - [(reg:H8cc CC_REG) (const_int 0)]) + [(match_dup 4) (const_int 0)]) (label_ref (match_dup 3)) (pc)))] - "") + " +{ + machine_mode mode; + + if (REG_P (operands[1]) + && operands[2] == const0_rtx + && (GET_CODE (operands[0]) == EQ + || GET_CODE (operands[0]) == NE + || GET_CODE (operands[0]) == LT + || GET_CODE (operands[0]) == GE + /* Our tstxx insns will set ZN and clear V, so we can handle + a couple additional cases. */ + || GET_CODE (operands[0]) == LE + || GET_CODE (operands[0]) == GT)) + mode = E_CCZNmode; + else + mode = E_CCmode; + operands[4] = gen_rtx_REG (mode, CC_REG); + operands[5] = gen_rtx_COMPARE (mode, operands[1], operands[2]); +}") (define_insn "*branch_1" [(set (pc) diff --git a/gcc/config/h8300/predicates.md b/gcc/config/h8300/predicates.md index f4e3ed4..bed23e9 100644 --- a/gcc/config/h8300/predicates.md +++ b/gcc/config/h8300/predicates.md @@ -506,6 +506,8 @@ { if (GET_MODE (op) == mode && (GET_CODE (XEXP (op, 0)) != PRE_DEC + && GET_CODE (XEXP (op, 0)) != PRE_INC + && GET_CODE (XEXP (op, 0)) != POST_DEC && GET_CODE (XEXP (op, 0)) != POST_INC)) return 1; return 0; |