1 ! SH5 code Copyright 2002 SuperH Ltd.
56 bnei/u r8,0,tr0 // r23_zero
61 bne/l r7,r6,tr1 // loop
62 /* The strings are aligned to each other. */
63 /* It is possible to have a loop with six cycles / iteration
64 by re-ordering the exit conditions, but then it needs extra
65 time and/or code to sort out the r4 != r5 case. */
74 bnei/u r8,0,tr0 // al_found_zero
75 beq/l r4,r5,tr1 // al_loop
76 blink tr3,r63 // cmp_quad
95 bne/u r8,r9,tr0 // found_zero
96 beq/l r4,r5,tr1 // loop
98 #ifdef __LITTLE_ENDIAN__
110 bne/u r8,r7,tr0 // zero_now
111 bne/u r4,r5,tr1 // cmp_quad
118 /* We konw that one of the values has at lest one zero, and r8 holds
119 an 0x01 or 0xff mask for every zero found in one of the operands.
120 If both operands have the first zero in the same place, this mask
121 allows us to truncate the comparison to the valid bytes in the
122 strings. If the first zero is in different places, it doesn't
123 matter if some invalid bytes are included, since the comparison
124 of the zero with the non-zero will determine the outcome. */
125 #ifdef __LITTLE_ENDIAN__
140 #ifdef __LITTLE_ENDIAN__
149 #else /* ! __SHMEDIA__, i.e. SH 1..4 / SHcompact */
160 ! r1-r2,r4-r5: clobbered
172 #ifdef DELAYED_BRANCHES
198 #else /* ! DELAYED_BRANCHES */
225 #endif /* ! __SHMEDIA__ */