1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 4*4882a593Smuzhiyun 2004, 2005, 2006 5*4882a593Smuzhiyun Free Software Foundation, Inc. 6*4882a593Smuzhiyun*/ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun!! libgcc routines for the Renesas / SuperH SH CPUs. 9*4882a593Smuzhiyun!! Contributed by Steve Chamberlain. 10*4882a593Smuzhiyun!! sac@cygnus.com 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines 13*4882a593Smuzhiyun!! recoded in assembly by Toshiyasu Morita 14*4882a593Smuzhiyun!! tm@netcom.com 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and 17*4882a593Smuzhiyun ELF local label prefixes by J"orn Rennecke 18*4882a593Smuzhiyun amylaar@cygnus.com */ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun! 21*4882a593Smuzhiyun! __ashrsi3 22*4882a593Smuzhiyun! 23*4882a593Smuzhiyun! Entry: 24*4882a593Smuzhiyun! 25*4882a593Smuzhiyun! r4: Value to shift 26*4882a593Smuzhiyun! r5: Shifts 27*4882a593Smuzhiyun! 28*4882a593Smuzhiyun! Exit: 29*4882a593Smuzhiyun! 30*4882a593Smuzhiyun! r0: Result 31*4882a593Smuzhiyun! 32*4882a593Smuzhiyun! Destroys: 33*4882a593Smuzhiyun! 34*4882a593Smuzhiyun! (none) 35*4882a593Smuzhiyun! 36*4882a593Smuzhiyun! __ashrsi3_r0 37*4882a593Smuzhiyun! 38*4882a593Smuzhiyun! Entry: 39*4882a593Smuzhiyun! 40*4882a593Smuzhiyun! r4: Value to shift 41*4882a593Smuzhiyun! r0: Shifts 42*4882a593Smuzhiyun! 43*4882a593Smuzhiyun! Exit: 44*4882a593Smuzhiyun! 45*4882a593Smuzhiyun! r0: Result 46*4882a593Smuzhiyun! 47*4882a593Smuzhiyun! Destroys: 48*4882a593Smuzhiyun! 49*4882a593Smuzhiyun! (none) 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun .global __ashrsi3 52*4882a593Smuzhiyun .global __ashrsi3_r0 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun .align 2 55*4882a593Smuzhiyun__ashrsi3: 56*4882a593Smuzhiyun mov r5,r0 57*4882a593Smuzhiyun .align 2 58*4882a593Smuzhiyun__ashrsi3_r0: 59*4882a593Smuzhiyun and #31,r0 60*4882a593Smuzhiyun mov.l r4,@-r15 61*4882a593Smuzhiyun mov r0,r4 62*4882a593Smuzhiyun mova ashrsi3_table,r0 63*4882a593Smuzhiyun mov.b @(r0,r4),r4 64*4882a593Smuzhiyun add r4,r0 65*4882a593Smuzhiyun jmp @r0 66*4882a593Smuzhiyun mov.l @r15+,r0 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun .align 2 69*4882a593Smuzhiyunashrsi3_table: 70*4882a593Smuzhiyun .byte ashrsi3_0-ashrsi3_table 71*4882a593Smuzhiyun .byte ashrsi3_1-ashrsi3_table 72*4882a593Smuzhiyun .byte ashrsi3_2-ashrsi3_table 73*4882a593Smuzhiyun .byte ashrsi3_3-ashrsi3_table 74*4882a593Smuzhiyun .byte ashrsi3_4-ashrsi3_table 75*4882a593Smuzhiyun .byte ashrsi3_5-ashrsi3_table 76*4882a593Smuzhiyun .byte ashrsi3_6-ashrsi3_table 77*4882a593Smuzhiyun .byte ashrsi3_7-ashrsi3_table 78*4882a593Smuzhiyun .byte ashrsi3_8-ashrsi3_table 79*4882a593Smuzhiyun .byte ashrsi3_9-ashrsi3_table 80*4882a593Smuzhiyun .byte ashrsi3_10-ashrsi3_table 81*4882a593Smuzhiyun .byte ashrsi3_11-ashrsi3_table 82*4882a593Smuzhiyun .byte ashrsi3_12-ashrsi3_table 83*4882a593Smuzhiyun .byte ashrsi3_13-ashrsi3_table 84*4882a593Smuzhiyun .byte ashrsi3_14-ashrsi3_table 85*4882a593Smuzhiyun .byte ashrsi3_15-ashrsi3_table 86*4882a593Smuzhiyun .byte ashrsi3_16-ashrsi3_table 87*4882a593Smuzhiyun .byte ashrsi3_17-ashrsi3_table 88*4882a593Smuzhiyun .byte ashrsi3_18-ashrsi3_table 89*4882a593Smuzhiyun .byte ashrsi3_19-ashrsi3_table 90*4882a593Smuzhiyun .byte ashrsi3_20-ashrsi3_table 91*4882a593Smuzhiyun .byte ashrsi3_21-ashrsi3_table 92*4882a593Smuzhiyun .byte ashrsi3_22-ashrsi3_table 93*4882a593Smuzhiyun .byte ashrsi3_23-ashrsi3_table 94*4882a593Smuzhiyun .byte ashrsi3_24-ashrsi3_table 95*4882a593Smuzhiyun .byte ashrsi3_25-ashrsi3_table 96*4882a593Smuzhiyun .byte ashrsi3_26-ashrsi3_table 97*4882a593Smuzhiyun .byte ashrsi3_27-ashrsi3_table 98*4882a593Smuzhiyun .byte ashrsi3_28-ashrsi3_table 99*4882a593Smuzhiyun .byte ashrsi3_29-ashrsi3_table 100*4882a593Smuzhiyun .byte ashrsi3_30-ashrsi3_table 101*4882a593Smuzhiyun .byte ashrsi3_31-ashrsi3_table 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunashrsi3_31: 104*4882a593Smuzhiyun rotcl r0 105*4882a593Smuzhiyun rts 106*4882a593Smuzhiyun subc r0,r0 107*4882a593Smuzhiyun 108*4882a593Smuzhiyunashrsi3_30: 109*4882a593Smuzhiyun shar r0 110*4882a593Smuzhiyunashrsi3_29: 111*4882a593Smuzhiyun shar r0 112*4882a593Smuzhiyunashrsi3_28: 113*4882a593Smuzhiyun shar r0 114*4882a593Smuzhiyunashrsi3_27: 115*4882a593Smuzhiyun shar r0 116*4882a593Smuzhiyunashrsi3_26: 117*4882a593Smuzhiyun shar r0 118*4882a593Smuzhiyunashrsi3_25: 119*4882a593Smuzhiyun shar r0 120*4882a593Smuzhiyunashrsi3_24: 121*4882a593Smuzhiyun shlr16 r0 122*4882a593Smuzhiyun shlr8 r0 123*4882a593Smuzhiyun rts 124*4882a593Smuzhiyun exts.b r0,r0 125*4882a593Smuzhiyun 126*4882a593Smuzhiyunashrsi3_23: 127*4882a593Smuzhiyun shar r0 128*4882a593Smuzhiyunashrsi3_22: 129*4882a593Smuzhiyun shar r0 130*4882a593Smuzhiyunashrsi3_21: 131*4882a593Smuzhiyun shar r0 132*4882a593Smuzhiyunashrsi3_20: 133*4882a593Smuzhiyun shar r0 134*4882a593Smuzhiyunashrsi3_19: 135*4882a593Smuzhiyun shar r0 136*4882a593Smuzhiyunashrsi3_18: 137*4882a593Smuzhiyun shar r0 138*4882a593Smuzhiyunashrsi3_17: 139*4882a593Smuzhiyun shar r0 140*4882a593Smuzhiyunashrsi3_16: 141*4882a593Smuzhiyun shlr16 r0 142*4882a593Smuzhiyun rts 143*4882a593Smuzhiyun exts.w r0,r0 144*4882a593Smuzhiyun 145*4882a593Smuzhiyunashrsi3_15: 146*4882a593Smuzhiyun shar r0 147*4882a593Smuzhiyunashrsi3_14: 148*4882a593Smuzhiyun shar r0 149*4882a593Smuzhiyunashrsi3_13: 150*4882a593Smuzhiyun shar r0 151*4882a593Smuzhiyunashrsi3_12: 152*4882a593Smuzhiyun shar r0 153*4882a593Smuzhiyunashrsi3_11: 154*4882a593Smuzhiyun shar r0 155*4882a593Smuzhiyunashrsi3_10: 156*4882a593Smuzhiyun shar r0 157*4882a593Smuzhiyunashrsi3_9: 158*4882a593Smuzhiyun shar r0 159*4882a593Smuzhiyunashrsi3_8: 160*4882a593Smuzhiyun shar r0 161*4882a593Smuzhiyunashrsi3_7: 162*4882a593Smuzhiyun shar r0 163*4882a593Smuzhiyunashrsi3_6: 164*4882a593Smuzhiyun shar r0 165*4882a593Smuzhiyunashrsi3_5: 166*4882a593Smuzhiyun shar r0 167*4882a593Smuzhiyunashrsi3_4: 168*4882a593Smuzhiyun shar r0 169*4882a593Smuzhiyunashrsi3_3: 170*4882a593Smuzhiyun shar r0 171*4882a593Smuzhiyunashrsi3_2: 172*4882a593Smuzhiyun shar r0 173*4882a593Smuzhiyunashrsi3_1: 174*4882a593Smuzhiyun rts 175*4882a593Smuzhiyun shar r0 176*4882a593Smuzhiyun 177*4882a593Smuzhiyunashrsi3_0: 178*4882a593Smuzhiyun rts 179*4882a593Smuzhiyun nop 180