1*c9945492SAndroid Build Coastguard Worker/* Contract for all versions is same as cas.l r2,r3,@r0 2*c9945492SAndroid Build Coastguard Worker * pr and r1 are also clobbered (by jsr & r1 as temp). 3*c9945492SAndroid Build Coastguard Worker * r0,r2,r4-r15 must be preserved. 4*c9945492SAndroid Build Coastguard Worker * r3 contains result (==r2 iff cas succeeded). */ 5*c9945492SAndroid Build Coastguard Worker 6*c9945492SAndroid Build Coastguard Worker .align 2 7*c9945492SAndroid Build Coastguard Worker.global __sh_cas_gusa 8*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_gusa 9*c9945492SAndroid Build Coastguard Worker__sh_cas_gusa: 10*c9945492SAndroid Build Coastguard Worker mov.l r5,@-r15 11*c9945492SAndroid Build Coastguard Worker mov.l r4,@-r15 12*c9945492SAndroid Build Coastguard Worker mov r0,r4 13*c9945492SAndroid Build Coastguard Worker mova 1f,r0 14*c9945492SAndroid Build Coastguard Worker mov r15,r1 15*c9945492SAndroid Build Coastguard Worker mov #(0f-1f),r15 16*c9945492SAndroid Build Coastguard Worker0: mov.l @r4,r5 17*c9945492SAndroid Build Coastguard Worker cmp/eq r5,r2 18*c9945492SAndroid Build Coastguard Worker bf 1f 19*c9945492SAndroid Build Coastguard Worker mov.l r3,@r4 20*c9945492SAndroid Build Coastguard Worker1: mov r1,r15 21*c9945492SAndroid Build Coastguard Worker mov r5,r3 22*c9945492SAndroid Build Coastguard Worker mov r4,r0 23*c9945492SAndroid Build Coastguard Worker mov.l @r15+,r4 24*c9945492SAndroid Build Coastguard Worker rts 25*c9945492SAndroid Build Coastguard Worker mov.l @r15+,r5 26*c9945492SAndroid Build Coastguard Worker 27*c9945492SAndroid Build Coastguard Worker.global __sh_cas_llsc 28*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_llsc 29*c9945492SAndroid Build Coastguard Worker__sh_cas_llsc: 30*c9945492SAndroid Build Coastguard Worker mov r0,r1 31*c9945492SAndroid Build Coastguard Worker .word 0x00ab /* synco */ 32*c9945492SAndroid Build Coastguard Worker0: .word 0x0163 /* movli.l @r1,r0 */ 33*c9945492SAndroid Build Coastguard Worker cmp/eq r0,r2 34*c9945492SAndroid Build Coastguard Worker bf 1f 35*c9945492SAndroid Build Coastguard Worker mov r3,r0 36*c9945492SAndroid Build Coastguard Worker .word 0x0173 /* movco.l r0,@r1 */ 37*c9945492SAndroid Build Coastguard Worker bf 0b 38*c9945492SAndroid Build Coastguard Worker mov r2,r0 39*c9945492SAndroid Build Coastguard Worker1: .word 0x00ab /* synco */ 40*c9945492SAndroid Build Coastguard Worker mov r0,r3 41*c9945492SAndroid Build Coastguard Worker rts 42*c9945492SAndroid Build Coastguard Worker mov r1,r0 43*c9945492SAndroid Build Coastguard Worker 44*c9945492SAndroid Build Coastguard Worker.global __sh_cas_imask 45*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_imask 46*c9945492SAndroid Build Coastguard Worker__sh_cas_imask: 47*c9945492SAndroid Build Coastguard Worker mov r0,r1 48*c9945492SAndroid Build Coastguard Worker stc sr,r0 49*c9945492SAndroid Build Coastguard Worker mov.l r0,@-r15 50*c9945492SAndroid Build Coastguard Worker or #0xf0,r0 51*c9945492SAndroid Build Coastguard Worker ldc r0,sr 52*c9945492SAndroid Build Coastguard Worker mov.l @r1,r0 53*c9945492SAndroid Build Coastguard Worker cmp/eq r0,r2 54*c9945492SAndroid Build Coastguard Worker bf 1f 55*c9945492SAndroid Build Coastguard Worker mov.l r3,@r1 56*c9945492SAndroid Build Coastguard Worker1: ldc.l @r15+,sr 57*c9945492SAndroid Build Coastguard Worker mov r0,r3 58*c9945492SAndroid Build Coastguard Worker rts 59*c9945492SAndroid Build Coastguard Worker mov r1,r0 60*c9945492SAndroid Build Coastguard Worker 61*c9945492SAndroid Build Coastguard Worker.global __sh_cas_cas_l 62*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_cas_l 63*c9945492SAndroid Build Coastguard Worker__sh_cas_cas_l: 64*c9945492SAndroid Build Coastguard Worker rts 65*c9945492SAndroid Build Coastguard Worker .word 0x2323 /* cas.l r2,r3,@r0 */ 66