1002 lines
24 KiB
ArmAsm
1002 lines
24 KiB
ArmAsm
; This testcase is part of GDB, the GNU debugger.
|
|
|
|
; Copyright 2017-2022 Free Software Foundation, Inc.
|
|
|
|
; This program is free software; you can redistribute it and/or modify
|
|
; it under the terms of the GNU General Public License as published by
|
|
; the Free Software Foundation; either version 3 of the License, or
|
|
; (at your option) any later version.
|
|
;
|
|
; This program is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
.section .text
|
|
.global main
|
|
|
|
#define TEST_J
|
|
#define TEST_JCC
|
|
#define TEST_JL
|
|
#define TEST_JLCC
|
|
#define TEST_B
|
|
#define TEST_BBIT
|
|
#define TEST_BCC
|
|
#define TEST_BI
|
|
#define TEST_BL
|
|
#define TEST_BRCC
|
|
#define TEST_JLI
|
|
#define TEST_LEAVE_S
|
|
#define TEST_LPCC
|
|
|
|
; JLI-specific stuff
|
|
#ifdef TEST_JLI
|
|
jli_table:
|
|
.word 0xdeadbeea
|
|
.word 0xdeadbeea
|
|
jli_target:
|
|
.word 0xdeadbeea
|
|
.word 0xdeadbeea
|
|
|
|
.set jli_offset, 3
|
|
#endif
|
|
main:
|
|
|
|
; Each test case requires several symbols to be set, that identify expected
|
|
; parameters of this instruction. Required symbols:
|
|
; ${test}_start: symbol points to start of the test
|
|
; ${test}_end: symbol points to the instruction after the jump/branch
|
|
; instruction.
|
|
; ${test}_target: branch target address.
|
|
; ${test}_has_delay_slot: whether instruction has delay slot.
|
|
; ${test}_cc: condition code numeric value.
|
|
|
|
.set r12_value, 0xdead0000
|
|
.set blink_value, 0xdead0004
|
|
.set limm_value, 0xdead0008
|
|
; Just an integer
|
|
.set r4_value, 0xdead000c
|
|
; Just an integer
|
|
.set r5_value, 0xdead0010
|
|
; offset index for BI [c]
|
|
.set r7_value, 4
|
|
.set u6_value, 0x20
|
|
.set s12_target, 0x100
|
|
|
|
mov r12, @r12_value
|
|
mov r4, @r4_value
|
|
mov r5, @r5_value
|
|
mov r7, @r7_value
|
|
mov blink, @blink_value
|
|
#ifdef TEST_JLI
|
|
; jli_base aux regnum = 0x290
|
|
sr jli_table, [0x290]
|
|
#endif
|
|
|
|
start_branch_tests:
|
|
|
|
#ifdef TEST_J
|
|
|
|
#define TEST_NAME j_c
|
|
; j [c]
|
|
.set j_c_target, @r4_value
|
|
.set j_c_has_delay_slot, 0
|
|
.set j_c_cc, 0
|
|
j_c_start:
|
|
j [r4]
|
|
j_c_end:
|
|
|
|
; j [blink]
|
|
.set j_blink_target, @blink_value
|
|
.set j_blink_has_delay_slot, 0
|
|
.set j_blink_cc, 0
|
|
mov blink, @j_blink_target
|
|
j_blink_start:
|
|
j [blink]
|
|
j_blink_end:
|
|
|
|
; j limm
|
|
.set j_limm_target, @limm_value
|
|
.set j_limm_has_delay_slot, 0
|
|
.set j_limm_cc, 0
|
|
j_limm_start:
|
|
j @j_limm_target
|
|
j_limm_end:
|
|
|
|
; j u6
|
|
.set j_u6_target, @u6_value
|
|
.set j_u6_has_delay_slot, 0
|
|
.set j_u6_cc, 0
|
|
j_u6_start:
|
|
j @j_u6_target
|
|
j_u6_end:
|
|
|
|
; j s12
|
|
.set j_s12_target, @s12_target
|
|
.set j_s12_has_delay_slot, 0
|
|
.set j_s12_cc, 0
|
|
j_s12_start:
|
|
j @j_s12_target
|
|
j_s12_end:
|
|
|
|
; j.d [c]
|
|
.set j_d_c_target, @r4_value
|
|
.set j_d_c_has_delay_slot, 1
|
|
.set j_d_c_cc, 0
|
|
j_d_c_start:
|
|
j.d [r4]
|
|
j_d_c_end:
|
|
nop_s
|
|
|
|
; j.d [blink]
|
|
.set j_d_blink_target, @blink_value
|
|
.set j_d_blink_has_delay_slot, 1
|
|
.set j_d_blink_cc, 0
|
|
j_d_blink_start:
|
|
j.d [blink]
|
|
j_d_blink_end:
|
|
nop_s
|
|
|
|
; j.d u6
|
|
.set j_d_u6_target, @u6_value
|
|
.set j_d_u6_has_delay_slot, 1
|
|
.set j_d_u6_cc, 0
|
|
j_d_u6_start:
|
|
j.d @j_d_u6_target
|
|
j_d_u6_end:
|
|
nop_s
|
|
|
|
; j.d s12
|
|
.set j_d_s12_target, @s12_target
|
|
.set j_d_s12_has_delay_slot, 1
|
|
.set j_d_s12_cc, 0
|
|
j_d_s12_start:
|
|
j.d @j_d_s12_target
|
|
j_d_s12_end:
|
|
nop_s
|
|
|
|
; j_s [b]
|
|
.set j_s_b_target, @r12_value
|
|
.set j_s_b_has_delay_slot, 0
|
|
.set j_s_b_cc, 0
|
|
j_s_b_start:
|
|
j_s [r12]
|
|
j_s_b_end:
|
|
|
|
; j_s.d [b]
|
|
.set j_s_d_b_target, @r12_value
|
|
.set j_s_d_b_has_delay_slot, 1
|
|
.set j_s_d_b_cc, 0
|
|
j_s_d_b_start:
|
|
j_s.d [r12]
|
|
j_s_d_b_end:
|
|
nop_s
|
|
|
|
; j_s [blink]
|
|
.set j_s_blink_target, @blink_value
|
|
.set j_s_blink_has_delay_slot, 0
|
|
.set j_s_blink_cc, 0
|
|
j_s_blink_start:
|
|
j_s [blink]
|
|
j_s_blink_end:
|
|
|
|
; j_s.d [blink]
|
|
.set j_s_d_blink_target, @blink_value
|
|
.set j_s_d_blink_has_delay_slot, 1
|
|
.set j_c_cc, 0
|
|
j_s_d_blink_start:
|
|
j_s.d [blink]
|
|
j_s_d_blink_end:
|
|
nop_s
|
|
#endif /* TEST_J */
|
|
|
|
#ifdef TEST_JCC
|
|
; jcc [c]
|
|
.set jcc_c_target, @r4_value
|
|
.set jcc_c_has_delay_slot, 0
|
|
.set jcc_c_cc, 1
|
|
jcc_c_start:
|
|
jeq [r4]
|
|
jcc_c_end:
|
|
|
|
; jcc [blink]
|
|
.set jcc_blink_target, @blink_value
|
|
.set jcc_blink_has_delay_slot, 0
|
|
.set jcc_blink_cc, 2
|
|
jcc_blink_start:
|
|
jnz [blink]
|
|
jcc_blink_end:
|
|
|
|
; jcc limm
|
|
.set jcc_limm_target, @limm_value
|
|
.set jcc_limm_has_delay_slot, 0
|
|
.set jcc_limm_cc, 9
|
|
jcc_limm_start:
|
|
jgt @jcc_limm_target
|
|
jcc_limm_end:
|
|
|
|
; jcc u6
|
|
.set jcc_u6_target, @u6_value
|
|
.set jcc_u6_has_delay_slot, 0
|
|
.set jcc_u6_cc, 0xA
|
|
jcc_u6_start:
|
|
jge @jcc_u6_target
|
|
jcc_u6_end:
|
|
|
|
; jcc.d [c]
|
|
.set jcc_d_c_target, @r4_value
|
|
.set jcc_d_c_has_delay_slot, 1
|
|
.set jcc_d_c_cc, 0xB
|
|
jcc_d_c_start:
|
|
jlt.d [r4]
|
|
jcc_d_c_end:
|
|
nop_s
|
|
|
|
; jcc.d [blink]
|
|
.set jcc_d_blink_target, @blink_value
|
|
.set jcc_d_blink_has_delay_slot, 1
|
|
.set jcc_d_blink_cc, 0xC
|
|
jcc_d_blink_start:
|
|
jle.d [blink]
|
|
jcc_d_blink_end:
|
|
nop_s
|
|
|
|
; jcc.d u6
|
|
.set jcc_d_u6_target, @u6_value
|
|
.set jcc_d_u6_has_delay_slot, 1
|
|
.set jcc_d_u6_cc, 0xE
|
|
jcc_d_u6_start:
|
|
jls.d @jcc_d_u6_target
|
|
jcc_d_u6_end:
|
|
nop_s
|
|
|
|
; jeq_s [blink]
|
|
.set jcc_eq_s_blink_target, @blink_value
|
|
.set jcc_eq_s_blink_has_delay_slot, 0
|
|
.set jcc_eq_s_blink_cc, 1
|
|
jcc_eq_s_blink_start:
|
|
jeq_s [blink]
|
|
jcc_eq_s_blink_end:
|
|
|
|
; jne_s [blink]
|
|
.set jcc_ne_s_blink_target, @blink_value
|
|
.set jcc_ne_s_blink_has_delay_slot, 0
|
|
.set jcc_ne_s_blink_cc, 2
|
|
jcc_ne_s_blink_start:
|
|
jne_s [blink]
|
|
jcc_ne_s_blink_end:
|
|
#endif /* TEST_JCC */
|
|
|
|
#ifdef TEST_JL
|
|
; jl [c]
|
|
.set jl_c_target, @r4_value
|
|
.set jl_c_has_delay_slot, 0
|
|
.set jl_c_cc, 0
|
|
jl_c_start:
|
|
jl [r4]
|
|
jl_c_end:
|
|
|
|
; jl limm
|
|
.set jl_limm_target, @limm_value
|
|
.set jl_limm_has_delay_slot, 0
|
|
.set jl_limm_cc, 0
|
|
jl_limm_start:
|
|
jl @jl_limm_target
|
|
jl_limm_end:
|
|
|
|
; jl u6
|
|
.set jl_u6_target, @u6_value
|
|
.set jl_u6_has_delay_slot, 0
|
|
.set jl_u6_cc, 0
|
|
jl_u6_start:
|
|
jl @jl_u6_target
|
|
jl_u6_end:
|
|
|
|
; jl s12
|
|
.set jl_s12_target, @s12_target
|
|
.set jl_s12_has_delay_slot, 0
|
|
.set jl_s12_cc, 0
|
|
jl_s12_start:
|
|
jl @jl_s12_target
|
|
jl_s12_end:
|
|
|
|
; jl.d [c]
|
|
.set jl_d_c_target, @r4_value
|
|
.set jl_d_c_has_delay_slot, 1
|
|
.set jl_d_c_cc, 0
|
|
jl_d_c_start:
|
|
jl.d [r4]
|
|
jl_d_c_end:
|
|
nop_s
|
|
|
|
; jl.d u6
|
|
.set jl_d_u6_target, @u6_value
|
|
.set jl_d_u6_has_delay_slot, 1
|
|
.set jl_d_u6_cc, 0
|
|
jl_d_u6_start:
|
|
jl.d @jl_d_u6_target
|
|
jl_d_u6_end:
|
|
nop_s
|
|
|
|
; jl.d s12
|
|
.set jl_d_s12_target, @s12_target
|
|
.set jl_d_s12_has_delay_slot, 1
|
|
.set jl_d_s12_cc, 0
|
|
jl_d_s12_start:
|
|
jl.d @jl_d_s12_target
|
|
jl_d_s12_end:
|
|
nop_s
|
|
|
|
; jl_s [b]
|
|
.set jl_s_b_target, @r12_value
|
|
.set jl_s_b_has_delay_slot, 0
|
|
.set jl_s_b_cc, 0
|
|
jl_s_b_start:
|
|
jl_s [r12]
|
|
jl_s_b_end:
|
|
|
|
; jl_s.d [b]
|
|
.set jl_s_d_b_target, @r12_value
|
|
.set jl_s_d_b_has_delay_slot, 1
|
|
.set jl_s_d_b_cc, 0
|
|
jl_s_d_b_start:
|
|
jl_s.d [r12]
|
|
jl_s_d_b_end:
|
|
nop_s
|
|
#endif /* TEST_JL */
|
|
|
|
#ifdef TEST_JLCC
|
|
; jlcc [c]
|
|
.set jlcc_c_target, @r4_value
|
|
.set jlcc_c_has_delay_slot, 0
|
|
.set jlcc_c_cc, 1
|
|
jlcc_c_start:
|
|
jleq [r4]
|
|
jlcc_c_end:
|
|
|
|
; jlcc limm
|
|
.set jlcc_limm_target, @limm_value
|
|
.set jlcc_limm_has_delay_slot, 0
|
|
.set jlcc_limm_cc, 0x9
|
|
jlcc_limm_start:
|
|
jlgt @jlcc_limm_target
|
|
jlcc_limm_end:
|
|
|
|
; jlcc u6
|
|
.set jlcc_u6_target, @u6_value
|
|
.set jlcc_u6_has_delay_slot, 0
|
|
.set jlcc_u6_cc, 0xA
|
|
jlcc_u6_start:
|
|
jlge @jlcc_u6_target
|
|
jlcc_u6_end:
|
|
|
|
; jlcc.d [c]
|
|
.set jlcc_d_c_target, @r4_value
|
|
.set jlcc_d_c_has_delay_slot, 1
|
|
.set jlcc_d_c_cc, 0xB
|
|
jlcc_d_c_start:
|
|
jllt.d [r4]
|
|
jlcc_d_c_end:
|
|
nop_s
|
|
|
|
; jlcc.d u6
|
|
.set jlcc_d_u6_target, @u6_value
|
|
.set jlcc_d_u6_has_delay_slot, 1
|
|
.set jlcc_d_u6_cc, 0xE
|
|
jlcc_d_u6_start:
|
|
jlls.d @jlcc_d_u6_target
|
|
jlcc_d_u6_end:
|
|
nop_s
|
|
#endif /* TEST_JLCC */
|
|
|
|
#ifdef TEST_B
|
|
.Lb_target:
|
|
; Artifical nop, so that first b will not branch to itself.
|
|
nop_s
|
|
; b s25
|
|
.set b_s25_target, @.Lb_target
|
|
.set b_s25_has_delay_slot, 0
|
|
.set b_s25_cc, 0
|
|
b_s25_start:
|
|
b @b_s25_target
|
|
b_s25_end:
|
|
|
|
; b.d s25
|
|
.set b_d_s25_target, @.Lb_target
|
|
.set b_d_s25_has_delay_slot, 1
|
|
.set b_d_s25_cc, 0
|
|
b_d_s25_start:
|
|
b.d @b_d_s25_target
|
|
b_d_s25_end:
|
|
nop_s
|
|
|
|
; b_s s10
|
|
.set b_s_s10_target, @.Lb_target
|
|
.set b_s_s10_has_delay_slot, 0
|
|
.set b_s_s10_cc, 0
|
|
b_s_s10_start:
|
|
b_s @b_s_s10_target
|
|
b_s_s10_end:
|
|
#endif /* TEST_B */
|
|
|
|
#ifdef TEST_BBIT
|
|
|
|
; Due to specifics of bbit implementation in assembler, only local symbols can
|
|
; be used as a branch targets for bbit and brcc.
|
|
; bbits and brcc don't have condition code set to anything.
|
|
.Lbbit_target:
|
|
nop_s
|
|
|
|
; bbit0.nt b,c,s9
|
|
.set bbit0_nt_b_c_s9_target, @.Lbbit_target
|
|
.set bbit0_nt_b_c_s9_has_delay_slot, 0
|
|
.set bbit0_nt_b_c_s9_cc, 0
|
|
bbit0_nt_b_c_s9_start:
|
|
bbit0.nt r4,r5,@bbit0_nt_b_c_s9_target
|
|
bbit0_nt_b_c_s9_end:
|
|
|
|
; bbit0.d.nt b,c,s9
|
|
.set bbit0_d_nt_b_c_s9_target, @.Lbbit_target
|
|
.set bbit0_d_nt_b_c_s9_has_delay_slot, 1
|
|
.set bbit0_d_nt_b_c_s9_cc, 0
|
|
bbit0_d_nt_b_c_s9_start:
|
|
bbit0.d.nt r4,r5,@.Lbbit_target
|
|
bbit0_d_nt_b_c_s9_end:
|
|
nop_s
|
|
|
|
; bbit0.t b,c,s9
|
|
.set bbit0_t_b_c_s9_target, @.Lbbit_target
|
|
.set bbit0_t_b_c_s9_has_delay_slot, 0
|
|
.set bbit0_t_b_c_s9_cc, 0
|
|
bbit0_t_b_c_s9_start:
|
|
bbit0.t r4,r5,@.Lbbit_target
|
|
bbit0_t_b_c_s9_end:
|
|
|
|
; bbit0.d.t b,c,s9
|
|
.set bbit0_d_t_b_c_s9_target, @.Lbbit_target
|
|
.set bbit0_d_t_b_c_s9_has_delay_slot, 1
|
|
.set bbit0_d_t_b_c_s9_cc, 0
|
|
bbit0_d_t_b_c_s9_start:
|
|
bbit0.d.t r4,r5,@.Lbbit_target
|
|
bbit0_d_t_b_c_s9_end:
|
|
nop_s
|
|
|
|
; bbit0.nt b,u6,s9
|
|
.set bbit0_nt_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_nt_b_u6_s9_has_delay_slot, 0
|
|
.set bbit0_nt_b_u6_s9_cc, 0
|
|
bbit0_nt_b_u6_s9_start:
|
|
bbit0.nt r4,u6_value,@.Lbbit_target
|
|
bbit0_nt_b_u6_s9_end:
|
|
|
|
; bbit0.d.nt b,u6,s9
|
|
.set bbit0_d_nt_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_d_nt_b_u6_s9_has_delay_slot, 1
|
|
.set bbit0_d_nt_b_u6_s9_cc, 0
|
|
bbit0_d_nt_b_u6_s9_start:
|
|
bbit0.d.nt r4,u6_value,@.Lbbit_target
|
|
bbit0_d_nt_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; bbit0.nt b,u6,s9
|
|
.set bbit0_t_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_t_b_u6_s9_has_delay_slot, 0
|
|
.set bbit0_t_b_u6_s9_cc, 0
|
|
bbit0_t_b_u6_s9_start:
|
|
bbit0.t r4,u6_value,@.Lbbit_target
|
|
bbit0_t_b_u6_s9_end:
|
|
|
|
; bbit0.d.nt b,u6,s9
|
|
.set bbit0_d_t_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_d_t_b_u6_s9_has_delay_slot, 1
|
|
.set bbit0_d_t_b_u6_s9_cc, 0
|
|
bbit0_d_t_b_u6_s9_start:
|
|
bbit0.d.t r4,u6_value,@.Lbbit_target
|
|
bbit0_d_t_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; bbit0.nt b,limm,s9
|
|
.set bbit0_nt_b_limm_s9_target, @.Lbbit_target
|
|
.set bbit0_nt_b_limm_s9_has_delay_slot, 0
|
|
.set bbit0_nt_b_limm_s9_cc, 0
|
|
bbit0_nt_b_limm_s9_start:
|
|
bbit0.nt r4,limm_value,@.Lbbit_target
|
|
bbit0_nt_b_limm_s9_end:
|
|
|
|
; bbit0.t b,limm,s9
|
|
.set bbit0_t_b_limm_s9_target, @.Lbbit_target
|
|
.set bbit0_t_b_limm_s9_has_delay_slot, 0
|
|
.set bbit0_t_b_limm_s9_cc, 0
|
|
bbit0_t_b_limm_s9_start:
|
|
bbit0.t r4,limm_value,@.Lbbit_target
|
|
bbit0_t_b_limm_s9_end:
|
|
|
|
; bbit0.nt limm,c,s9
|
|
.set bbit0_nt_limm_c_s9_target, @.Lbbit_target
|
|
.set bbit0_nt_limm_c_s9_has_delay_slot, 0
|
|
.set bbit0_nt_limm_c_s9_cc, 0
|
|
bbit0_nt_limm_c_s9_start:
|
|
bbit0.nt limm_value,r4,@.Lbbit_target
|
|
bbit0_nt_limm_c_s9_end:
|
|
|
|
; bbit0.t limm,c,s9
|
|
.set bbit0_t_limm_c_s9_target, @.Lbbit_target
|
|
.set bbit0_t_limm_c_s9_has_delay_slot, 0
|
|
.set bbit0_t_limm_c_s9_cc, 0
|
|
bbit0_t_limm_c_s9_start:
|
|
bbit0.t limm_value,r4,@.Lbbit_target
|
|
bbit0_t_limm_c_s9_end:
|
|
|
|
; bbit0.nt limm,u6,s9
|
|
.set bbit0_nt_limm_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_nt_limm_u6_s9_has_delay_slot, 0
|
|
.set bbit0_nt_limm_u6_s9_cc, 0
|
|
bbit0_nt_limm_u6_s9_start:
|
|
bbit0.nt limm_value,u6_value,@.Lbbit_target
|
|
bbit0_nt_limm_u6_s9_end:
|
|
|
|
; bbit0.t limm,u6,s9
|
|
.set bbit0_t_limm_u6_s9_target, @.Lbbit_target
|
|
.set bbit0_t_limm_u6_s9_has_delay_slot, 0
|
|
.set bbit0_t_limm_u6_s9_cc, 0
|
|
bbit0_t_limm_u6_s9_start:
|
|
bbit0.t limm_value,u6_value,@.Lbbit_target
|
|
bbit0_t_limm_u6_s9_end:
|
|
|
|
; bbit1.nt b,c,s9
|
|
.set bbit1_nt_b_c_s9_target, @.Lbbit_target
|
|
.set bbit1_nt_b_c_s9_has_delay_slot, 0
|
|
.set bbit1_nt_b_c_s9_cc, 0
|
|
bbit1_nt_b_c_s9_start:
|
|
bbit1.nt r4,r5,@.Lbbit_target
|
|
bbit1_nt_b_c_s9_end:
|
|
|
|
; bbit1.d.nt b,c,s9
|
|
.set bbit1_d_nt_b_c_s9_target, @.Lbbit_target
|
|
.set bbit1_d_nt_b_c_s9_has_delay_slot, 1
|
|
.set bbit1_d_nt_b_c_s9_cc, 0
|
|
bbit1_d_nt_b_c_s9_start:
|
|
bbit1.d.nt r4,r5,@.Lbbit_target
|
|
bbit1_d_nt_b_c_s9_end:
|
|
nop_s
|
|
|
|
; bbit1.t b,c,s9
|
|
.set bbit1_t_b_c_s9_target, @.Lbbit_target
|
|
.set bbit1_t_b_c_s9_has_delay_slot, 0
|
|
.set bbit1_t_b_c_s9_cc, 0
|
|
bbit1_t_b_c_s9_start:
|
|
bbit1.t r4,r5,@.Lbbit_target
|
|
bbit1_t_b_c_s9_end:
|
|
|
|
; bbit1.d.t b,c,s9
|
|
.set bbit1_d_t_b_c_s9_target, @.Lbbit_target
|
|
.set bbit1_d_t_b_c_s9_has_delay_slot, 1
|
|
.set bbit1_d_t_b_c_s9_cc, 0
|
|
bbit1_d_t_b_c_s9_start:
|
|
bbit1.d.t r4,r5,@.Lbbit_target
|
|
bbit1_d_t_b_c_s9_end:
|
|
nop_s
|
|
|
|
; bbit1.nt b,u6,s9
|
|
.set bbit1_nt_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_nt_b_u6_s9_has_delay_slot, 0
|
|
.set bbit1_nt_b_u6_s9_cc, 0
|
|
bbit1_nt_b_u6_s9_start:
|
|
bbit1.nt r4,u6_value,@.Lbbit_target
|
|
bbit1_nt_b_u6_s9_end:
|
|
|
|
; bbit1.d.nt b,u6,s9
|
|
.set bbit1_d_nt_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_d_nt_b_u6_s9_has_delay_slot, 1
|
|
.set bbit1_d_nt_b_u6_s9_cc, 0
|
|
bbit1_d_nt_b_u6_s9_start:
|
|
bbit1.d.nt r4,u6_value,@.Lbbit_target
|
|
bbit1_d_nt_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; bbit1.nt b,u6,s9
|
|
.set bbit1_t_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_t_b_u6_s9_has_delay_slot, 0
|
|
.set bbit1_t_b_u6_s9_cc, 0
|
|
bbit1_t_b_u6_s9_start:
|
|
bbit1.t r4,u6_value,@.Lbbit_target
|
|
bbit1_t_b_u6_s9_end:
|
|
|
|
; bbit1.d.nt b,u6,s9
|
|
.set bbit1_d_t_b_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_d_t_b_u6_s9_has_delay_slot, 1
|
|
.set bbit1_d_t_b_u6_s9_cc, 0
|
|
bbit1_d_t_b_u6_s9_start:
|
|
bbit1.d.t r4,u6_value,@.Lbbit_target
|
|
bbit1_d_t_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; bbit1.nt b,limm,s9
|
|
.set bbit1_nt_b_limm_s9_target, @.Lbbit_target
|
|
.set bbit1_nt_b_limm_s9_has_delay_slot, 0
|
|
.set bbit1_nt_b_limm_s9_cc, 0
|
|
bbit1_nt_b_limm_s9_start:
|
|
bbit1.nt r4,limm_value,@.Lbbit_target
|
|
bbit1_nt_b_limm_s9_end:
|
|
|
|
; bbit1.t b,limm,s9
|
|
.set bbit1_t_b_limm_s9_target, @.Lbbit_target
|
|
.set bbit1_t_b_limm_s9_has_delay_slot, 0
|
|
.set bbit1_t_b_limm_s9_cc, 0
|
|
bbit1_t_b_limm_s9_start:
|
|
bbit1.t r4,limm_value,@.Lbbit_target
|
|
bbit1_t_b_limm_s9_end:
|
|
|
|
; bbit1.nt limm,c,s9
|
|
.set bbit1_nt_limm_c_s9_target, @.Lbbit_target
|
|
.set bbit1_nt_limm_c_s9_has_delay_slot, 0
|
|
.set bbit1_nt_limm_c_s9_cc, 0
|
|
bbit1_nt_limm_c_s9_start:
|
|
bbit1.nt limm_value,r4,@.Lbbit_target
|
|
bbit1_nt_limm_c_s9_end:
|
|
|
|
; bbit1.t limm,c,s9
|
|
.set bbit1_t_limm_c_s9_target, @.Lbbit_target
|
|
.set bbit1_t_limm_c_s9_has_delay_slot, 0
|
|
.set bbit1_t_limm_c_s9_cc, 0
|
|
bbit1_t_limm_c_s9_start:
|
|
bbit1.t limm_value,r4,@.Lbbit_target
|
|
bbit1_t_limm_c_s9_end:
|
|
|
|
; bbit1.nt limm,u6,s9
|
|
.set bbit1_nt_limm_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_nt_limm_u6_s9_has_delay_slot, 0
|
|
.set bbit1_nt_limm_u6_s9_cc, 0
|
|
bbit1_nt_limm_u6_s9_start:
|
|
bbit1.nt limm_value,u6_value,@.Lbbit_target
|
|
bbit1_nt_limm_u6_s9_end:
|
|
|
|
; bbit1.t limm,u6,s9
|
|
.set bbit1_t_limm_u6_s9_target, @.Lbbit_target
|
|
.set bbit1_t_limm_u6_s9_has_delay_slot, 0
|
|
.set bbit1_t_limm_u6_s9_cc, 0
|
|
bbit1_t_limm_u6_s9_start:
|
|
bbit1.t limm_value,u6_value,@.Lbbit_target
|
|
bbit1_t_limm_u6_s9_end:
|
|
#endif /* TEST_BBIT */
|
|
|
|
#ifdef TEST_BCC
|
|
.Lbcc_target:
|
|
; bcc s21
|
|
.set bcc_s21_target, @.Lbcc_target
|
|
.set bcc_s21_has_delay_slot, 0
|
|
.set bcc_s21_cc, 1
|
|
bcc_s21_start:
|
|
; beq @bcc_s21_target
|
|
beq @.Lbcc_target
|
|
bcc_s21_end:
|
|
|
|
; bcc.d s21
|
|
.set bcc_d_s21_target, @.Lbcc_target
|
|
.set bcc_d_s21_has_delay_slot, 1
|
|
.set bcc_d_s21_cc, 1
|
|
bcc_d_s21_start:
|
|
beq.d @bcc_d_s21_target
|
|
bcc_d_s21_end:
|
|
nop_s
|
|
|
|
.Lbcc_s_target:
|
|
; beq_s s10
|
|
.set beq_s_s10_target, @.Lbcc_s_target
|
|
.set beq_s_s10_has_delay_slot, 0
|
|
.set beq_s_s10_cc, 1
|
|
beq_s_s10_start:
|
|
# beq_s.d @beq_s_s10_target
|
|
beq_s @.Lbcc_s_target
|
|
beq_s_s10_end:
|
|
|
|
; bne_s s10
|
|
.set bne_s_s10_target, @.Lbcc_s_target
|
|
.set bne_s_s10_has_delay_slot, 0
|
|
.set bne_s_s10_cc, 2
|
|
bne_s_s10_start:
|
|
bne_s @bne_s_s10_target
|
|
bne_s_s10_end:
|
|
|
|
; bgt_s s7
|
|
.set bgt_s_s7_target, @.Lbcc_s_target
|
|
.set bgt_s_s7_has_delay_slot, 0
|
|
.set bgt_s_s7_cc, 0x9
|
|
bgt_s_s7_start:
|
|
bgt_s @bgt_s_s7_target
|
|
bgt_s_s7_end:
|
|
|
|
; bge_s s7
|
|
.set bge_s_s7_target, @.Lbcc_s_target
|
|
.set bge_s_s7_has_delay_slot, 0
|
|
.set bge_s_s7_cc, 0xA
|
|
bge_s_s7_start:
|
|
bge_s @bge_s_s7_target
|
|
bge_s_s7_end:
|
|
|
|
; blt_s s7
|
|
.set blt_s_s7_target, @.Lbcc_s_target
|
|
.set blt_s_s7_has_delay_slot, 0
|
|
.set blt_s_s7_cc, 0xB
|
|
blt_s_s7_start:
|
|
blt_s @blt_s_s7_target
|
|
blt_s_s7_end:
|
|
|
|
; ble_s s7
|
|
.set ble_s_s7_target, @.Lbcc_s_target
|
|
.set ble_s_s7_has_delay_slot, 0
|
|
.set ble_s_s7_cc, 0xC
|
|
ble_s_s7_start:
|
|
ble_s @ble_s_s7_target
|
|
ble_s_s7_end:
|
|
|
|
; bhi_s s7
|
|
.set bhi_s_s7_target, @.Lbcc_s_target
|
|
.set bhi_s_s7_has_delay_slot, 0
|
|
.set bhi_s_s7_cc, 0xD
|
|
bhi_s_s7_start:
|
|
bhi_s @bhi_s_s7_target
|
|
bhi_s_s7_end:
|
|
|
|
; bhs_s s7
|
|
.set bhs_s_s7_target, @.Lbcc_s_target
|
|
.set bhs_s_s7_has_delay_slot, 0
|
|
.set bhs_s_s7_cc, 0x6
|
|
bhs_s_s7_start:
|
|
bhs_s @bhs_s_s7_target
|
|
bhs_s_s7_end:
|
|
|
|
; blo_s s7
|
|
.set blo_s_s7_target, @.Lbcc_s_target
|
|
.set blo_s_s7_has_delay_slot, 0
|
|
.set blo_s_s7_cc, 0x5
|
|
blo_s_s7_start:
|
|
blo_s @blo_s_s7_target
|
|
blo_s_s7_end:
|
|
|
|
; bls_s s7
|
|
.set bls_s_s7_target, @.Lbcc_s_target
|
|
.set bls_s_s7_has_delay_slot, 0
|
|
.set bls_s_s7_cc, 0xE
|
|
bls_s_s7_start:
|
|
bls_s @bls_s_s7_target
|
|
bls_s_s7_end:
|
|
#endif /* TEST_BCC */
|
|
|
|
#ifdef TEST_BI
|
|
; bi [c]
|
|
.set bi_c_target, @bi_c_end + (@r7_value << 2)
|
|
.set bi_c_has_delay_slot, 0
|
|
.set bi_c_cc, 0
|
|
bi_c_start:
|
|
bi [r7]
|
|
bi_c_end:
|
|
|
|
; bih [c]
|
|
.set bih_c_target, @bih_c_end + (@r7_value << 1)
|
|
.set bih_c_has_delay_slot, 0
|
|
.set bih_c_cc, 0
|
|
bih_c_start:
|
|
bih [r7]
|
|
bih_c_end:
|
|
#endif /* TEST_BI */
|
|
|
|
#ifdef TEST_BL
|
|
.Lbl_target:
|
|
; bl s25
|
|
.set bl_s25_target, @.Lbl_target
|
|
.set bl_s25_has_delay_slot, 0
|
|
.set bl_s25_cc, 0
|
|
bl_s25_start:
|
|
bl @bl_s25_target
|
|
bl_s25_end:
|
|
|
|
; bl.d s25
|
|
.set bl_d_s25_target, @.Lbl_target
|
|
.set bl_d_s25_has_delay_slot, 1
|
|
.set bl_d_s25_cc, 0
|
|
bl_d_s25_start:
|
|
bl.d @bl_d_s25_target
|
|
bl_d_s25_end:
|
|
nop_s
|
|
|
|
; bl_s s13
|
|
.set bl_s_s13_target, @.Lbl_target
|
|
.set bl_s_s13_has_delay_slot, 0
|
|
.set bl_s_s13_cc, 0
|
|
bl_s_s13_start:
|
|
bl_s @bl_s_s13_target
|
|
bl_s_s13_end:
|
|
|
|
; blcc s21
|
|
.set blcc_s21_target, @.Lbl_target
|
|
.set blcc_s21_has_delay_slot, 0
|
|
.set blcc_s21_cc, 1
|
|
blcc_s21_start:
|
|
bleq @blcc_s21_target
|
|
blcc_s21_end:
|
|
|
|
; blcc.d s21
|
|
.set blcc_d_s21_target, @.Lbl_target
|
|
.set blcc_d_s21_has_delay_slot, 1
|
|
.set blcc_d_s21_cc, 2
|
|
blcc_d_s21_start:
|
|
blnz.d @blcc_d_s21_target
|
|
blcc_d_s21_end:
|
|
nop_s
|
|
#endif /* TEST_BL */
|
|
|
|
#ifdef TEST_BRCC
|
|
.Lbrcc_target:
|
|
; breq.nt b,c,s9
|
|
.set breq_nt_b_c_s9_target, @.Lbrcc_target
|
|
.set breq_nt_b_c_s9_has_delay_slot, 0
|
|
.set breq_nt_b_c_s9_cc, 1
|
|
breq_nt_b_c_s9_start:
|
|
breq.nt r4,r5,@.Lbrcc_target
|
|
breq_nt_b_c_s9_end:
|
|
|
|
; breq.d.nt b,c,s9
|
|
.set breq_d_nt_b_c_s9_target, @.Lbrcc_target
|
|
.set breq_d_nt_b_c_s9_has_delay_slot, 1
|
|
.set breq_d_nt_b_c_s9_cc, 1
|
|
breq_d_nt_b_c_s9_start:
|
|
breq.d.nt r4,r5,@.Lbrcc_target
|
|
breq_d_nt_b_c_s9_end:
|
|
nop_s
|
|
|
|
; breq.t b,c,s9
|
|
.set breq_t_b_c_s9_target, @.Lbrcc_target
|
|
.set breq_t_b_c_s9_has_delay_slot, 0
|
|
.set breq_t_b_c_s9_cc, 1
|
|
breq_t_b_c_s9_start:
|
|
breq.t r4,r5,@.Lbrcc_target
|
|
breq_t_b_c_s9_end:
|
|
|
|
; breq.d.t b,c,s9
|
|
.set breq_d_t_b_c_s9_target, @.Lbrcc_target
|
|
.set breq_d_t_b_c_s9_has_delay_slot, 1
|
|
.set breq_d_t_b_c_s9_cc, 1
|
|
breq_d_t_b_c_s9_start:
|
|
breq.d.t r4,r5,@.Lbrcc_target
|
|
breq_d_t_b_c_s9_end:
|
|
nop_s
|
|
|
|
; breq.nt b,u6,s9
|
|
.set breq_nt_b_u6_s9_target, @.Lbrcc_target
|
|
.set breq_nt_b_u6_s9_has_delay_slot, 0
|
|
.set breq_nt_b_u6_s9_cc, 1
|
|
breq_nt_b_u6_s9_start:
|
|
breq.nt r4,u6_value,@.Lbrcc_target
|
|
breq_nt_b_u6_s9_end:
|
|
|
|
; breq.d.nt b,u6,s9
|
|
.set breq_d_nt_b_u6_s9_target, @.Lbrcc_target
|
|
.set breq_d_nt_b_u6_s9_has_delay_slot, 1
|
|
.set breq_d_nt_b_u6_s9_cc, 1
|
|
breq_d_nt_b_u6_s9_start:
|
|
breq.d.nt r4,u6_value,@.Lbrcc_target
|
|
breq_d_nt_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; breq.nt b,u6,s9
|
|
.set breq_t_b_u6_s9_target, @.Lbrcc_target
|
|
.set breq_t_b_u6_s9_has_delay_slot, 0
|
|
.set breq_t_b_u6_s9_cc, 1
|
|
breq_t_b_u6_s9_start:
|
|
breq.t r4,u6_value,@.Lbrcc_target
|
|
breq_t_b_u6_s9_end:
|
|
|
|
; breq.d.nt b,u6,s9
|
|
.set breq_d_t_b_u6_s9_target, @.Lbrcc_target
|
|
.set breq_d_t_b_u6_s9_has_delay_slot, 1
|
|
.set breq_d_t_b_u6_s9_cc, 1
|
|
breq_d_t_b_u6_s9_start:
|
|
breq.d.t r4,u6_value,@.Lbrcc_target
|
|
breq_d_t_b_u6_s9_end:
|
|
nop_s
|
|
|
|
; breq.nt b,limm,s9
|
|
.set breq_nt_b_limm_s9_target, @.Lbrcc_target
|
|
.set breq_nt_b_limm_s9_has_delay_slot, 0
|
|
.set breq_nt_b_limm_s9_cc, 1
|
|
breq_nt_b_limm_s9_start:
|
|
breq.nt r4,limm_value,@.Lbrcc_target
|
|
breq_nt_b_limm_s9_end:
|
|
|
|
; breq.t b,limm,s9
|
|
.set breq_t_b_limm_s9_target, @.Lbrcc_target
|
|
.set breq_t_b_limm_s9_has_delay_slot, 0
|
|
.set breq_t_b_limm_s9_cc, 1
|
|
breq_t_b_limm_s9_start:
|
|
breq.t r4,limm_value,@.Lbrcc_target
|
|
breq_t_b_limm_s9_end:
|
|
|
|
; breq.nt limm,c,s9
|
|
.set breq_nt_limm_c_s9_target, @.Lbrcc_target
|
|
.set breq_nt_limm_c_s9_has_delay_slot, 0
|
|
.set breq_nt_limm_c_s9_cc, 1
|
|
breq_nt_limm_c_s9_start:
|
|
breq.nt limm_value,r4,@.Lbrcc_target
|
|
breq_nt_limm_c_s9_end:
|
|
|
|
; breq.t limm,c,s9
|
|
.set breq_t_limm_c_s9_target, @.Lbrcc_target
|
|
.set breq_t_limm_c_s9_has_delay_slot, 0
|
|
.set breq_t_limm_c_s9_cc, 1
|
|
breq_t_limm_c_s9_start:
|
|
breq.t limm_value,r4,@.Lbrcc_target
|
|
breq_t_limm_c_s9_end:
|
|
|
|
; breq.nt limm,u6,s9
|
|
.set breq_nt_limm_u6_s9_target, @.Lbrcc_target
|
|
.set breq_nt_limm_u6_s9_has_delay_slot, 0
|
|
.set breq_nt_limm_u6_s9_cc, 1
|
|
breq_nt_limm_u6_s9_start:
|
|
breq.nt limm_value,u6_value,@.Lbrcc_target
|
|
breq_nt_limm_u6_s9_end:
|
|
|
|
; breq.t limm,u6,s9
|
|
.set breq_t_limm_u6_s9_target, @.Lbrcc_target
|
|
.set breq_t_limm_u6_s9_has_delay_slot, 0
|
|
.set breq_t_limm_u6_s9_cc, 1
|
|
breq_t_limm_u6_s9_start:
|
|
breq.t limm_value,u6_value,@.Lbrcc_target
|
|
breq_t_limm_u6_s9_end:
|
|
|
|
; brne_s b,0,s8
|
|
.set brne_s_b_0_s8_target, @.Lbrcc_target
|
|
.set brne_s_b_0_s8_has_delay_slot, 0
|
|
.set brne_s_b_0_s8_cc, 1
|
|
brne_s_b_0_s8_start:
|
|
brne r12,0,@.Lbrcc_target
|
|
brne_s_b_0_s8_end:
|
|
|
|
; breq_s b,0,s8
|
|
.set breq_s_b_0_s8_target, @.Lbrcc_target
|
|
.set breq_s_b_0_s8_has_delay_slot, 0
|
|
.set breq_s_b_0_s8_cc, 1
|
|
breq_s_b_0_s8_start:
|
|
breq r12,0,@.Lbrcc_target
|
|
breq_s_b_0_s8_end:
|
|
#endif /* TEST_BRCC */
|
|
|
|
#ifdef TEST_JLI
|
|
; jli_s u10
|
|
.set jli_s_u10_target, @jli_target
|
|
.set jli_s_u10_has_delay_slot, 0
|
|
.set jli_s_u10_cc, 0
|
|
jli_s_u10_start:
|
|
jli_s jli_offset
|
|
jli_s_u10_end:
|
|
#endif
|
|
|
|
#ifdef TEST_LEAVE_S
|
|
; leave_s
|
|
.set leave_s_target, @blink_value
|
|
.set leave_s_has_delay_slot, 0
|
|
.set leave_s_cc, 0
|
|
leave_s_start:
|
|
; leave_s [r13-gp,fp,blink,pcl]
|
|
leave_s (14 + 16 + 32 + 64)
|
|
leave_s_end:
|
|
#endif
|
|
|
|
#ifdef TEST_LPCC
|
|
; lpcc
|
|
.set lpcc_u7_target, @.Llpcc_end
|
|
.set lpcc_u7_has_delay_slot, 0
|
|
.set lpcc_u7_cc, 1
|
|
lpcc_u7_start:
|
|
lpeq @lpcc_u7_target
|
|
lpcc_u7_end:
|
|
nop
|
|
nop
|
|
.Llpcc_end:
|
|
#endif
|
|
|
|
.Lend:
|
|
|