|
|
1.1 ! root 1: /* This is an assembly language implementation of libgcc1.c for the sparclite ! 2: processor. ! 3: ! 4: These routines are all from the Sparclite User's Guide, slightly edited ! 5: to match the desired calling convention, and also to optimize them. */ ! 6: ! 7: #ifdef L_udivsi3 ! 8: .text ! 9: .align 4 ! 10: .global .udiv ! 11: .proc 04 ! 12: .udiv: ! 13: wr %g0,%g0,%y ! Not a delayed write for sparclite ! 14: tst %g0 ! 15: divscc %o0,%o1,%g1 ! 16: divscc %g1,%o1,%g1 ! 17: divscc %g1,%o1,%g1 ! 18: divscc %g1,%o1,%g1 ! 19: divscc %g1,%o1,%g1 ! 20: divscc %g1,%o1,%g1 ! 21: divscc %g1,%o1,%g1 ! 22: divscc %g1,%o1,%g1 ! 23: divscc %g1,%o1,%g1 ! 24: divscc %g1,%o1,%g1 ! 25: divscc %g1,%o1,%g1 ! 26: divscc %g1,%o1,%g1 ! 27: divscc %g1,%o1,%g1 ! 28: divscc %g1,%o1,%g1 ! 29: divscc %g1,%o1,%g1 ! 30: divscc %g1,%o1,%g1 ! 31: divscc %g1,%o1,%g1 ! 32: divscc %g1,%o1,%g1 ! 33: divscc %g1,%o1,%g1 ! 34: divscc %g1,%o1,%g1 ! 35: divscc %g1,%o1,%g1 ! 36: divscc %g1,%o1,%g1 ! 37: divscc %g1,%o1,%g1 ! 38: divscc %g1,%o1,%g1 ! 39: divscc %g1,%o1,%g1 ! 40: divscc %g1,%o1,%g1 ! 41: divscc %g1,%o1,%g1 ! 42: divscc %g1,%o1,%g1 ! 43: divscc %g1,%o1,%g1 ! 44: divscc %g1,%o1,%g1 ! 45: divscc %g1,%o1,%g1 ! 46: retl ! 47: divscc %g1,%o1,%o0 ! 48: #endif ! 49: ! 50: #ifdef L_umodsi3 ! 51: .text ! 52: .align 4 ! 53: .global .urem ! 54: .proc 04 ! 55: .urem: ! 56: wr %g0,%g0,%y ! Not a delayed write for sparclite ! 57: tst %g0 ! 58: divscc %o0,%o1,%g1 ! 59: divscc %g1,%o1,%g1 ! 60: divscc %g1,%o1,%g1 ! 61: divscc %g1,%o1,%g1 ! 62: divscc %g1,%o1,%g1 ! 63: divscc %g1,%o1,%g1 ! 64: divscc %g1,%o1,%g1 ! 65: divscc %g1,%o1,%g1 ! 66: divscc %g1,%o1,%g1 ! 67: divscc %g1,%o1,%g1 ! 68: divscc %g1,%o1,%g1 ! 69: divscc %g1,%o1,%g1 ! 70: divscc %g1,%o1,%g1 ! 71: divscc %g1,%o1,%g1 ! 72: divscc %g1,%o1,%g1 ! 73: divscc %g1,%o1,%g1 ! 74: divscc %g1,%o1,%g1 ! 75: divscc %g1,%o1,%g1 ! 76: divscc %g1,%o1,%g1 ! 77: divscc %g1,%o1,%g1 ! 78: divscc %g1,%o1,%g1 ! 79: divscc %g1,%o1,%g1 ! 80: divscc %g1,%o1,%g1 ! 81: divscc %g1,%o1,%g1 ! 82: divscc %g1,%o1,%g1 ! 83: divscc %g1,%o1,%g1 ! 84: divscc %g1,%o1,%g1 ! 85: divscc %g1,%o1,%g1 ! 86: divscc %g1,%o1,%g1 ! 87: divscc %g1,%o1,%g1 ! 88: divscc %g1,%o1,%g1 ! 89: divscc %g1,%o1,%g1 ! 90: bl 1f ! 91: rd %y,%o0 ! 92: retl ! 93: nop ! 94: 1: retl ! 95: add %o0,%o1,%o0 ! 96: #endif ! 97: ! 98: #ifdef L_divsi3 ! 99: .text ! 100: .align 4 ! 101: .global .div ! 102: .proc 04 ! 103: ! ??? This routine could be made faster if was optimized, and if it was ! 104: ! rewritten to only calculate the quotient. ! 105: .div: ! 106: wr %g0,%g0,%y ! Not a delayed write for sparclite ! 107: mov %o1,%o4 ! 108: tst %o1 ! 109: bl,a 1f ! 110: sub %g0,%o4,%o4 ! 111: 1: tst %o0 ! 112: bl,a 2f ! 113: mov -1,%y ! 114: 2: divscc %o0,%o4,%g1 ! 115: divscc %g1,%o4,%g1 ! 116: divscc %g1,%o4,%g1 ! 117: divscc %g1,%o4,%g1 ! 118: divscc %g1,%o4,%g1 ! 119: divscc %g1,%o4,%g1 ! 120: divscc %g1,%o4,%g1 ! 121: divscc %g1,%o4,%g1 ! 122: divscc %g1,%o4,%g1 ! 123: divscc %g1,%o4,%g1 ! 124: divscc %g1,%o4,%g1 ! 125: divscc %g1,%o4,%g1 ! 126: divscc %g1,%o4,%g1 ! 127: divscc %g1,%o4,%g1 ! 128: divscc %g1,%o4,%g1 ! 129: divscc %g1,%o4,%g1 ! 130: divscc %g1,%o4,%g1 ! 131: divscc %g1,%o4,%g1 ! 132: divscc %g1,%o4,%g1 ! 133: divscc %g1,%o4,%g1 ! 134: divscc %g1,%o4,%g1 ! 135: divscc %g1,%o4,%g1 ! 136: divscc %g1,%o4,%g1 ! 137: divscc %g1,%o4,%g1 ! 138: divscc %g1,%o4,%g1 ! 139: divscc %g1,%o4,%g1 ! 140: divscc %g1,%o4,%g1 ! 141: divscc %g1,%o4,%g1 ! 142: divscc %g1,%o4,%g1 ! 143: divscc %g1,%o4,%g1 ! 144: divscc %g1,%o4,%g1 ! 145: divscc %g1,%o4,%g1 ! 146: be 6f ! 147: mov %y,%o3 ! 148: bg 4f ! 149: addcc %o3,%o4,%g0 ! 150: be,a 6f ! 151: mov %g0,%o3 ! 152: tst %o0 ! 153: bl 5f ! 154: tst %g1 ! 155: ba 5f ! 156: add %o3,%o4,%o3 ! 157: 4: subcc %o3,%o4,%g0 ! 158: be,a 6f ! 159: mov %g0,%o3 ! 160: tst %o0 ! 161: bge 5f ! 162: tst %g1 ! 163: sub %o3,%o4,%o3 ! 164: 5: bl,a 6f ! 165: add %g1,1,%g1 ! 166: 6: tst %o1 ! 167: bl,a 7f ! 168: sub %g0,%g1,%g1 ! 169: 7: retl ! 170: mov %g1,%o0 ! Quotient is in %g1. ! 171: #endif ! 172: ! 173: #ifdef L_modsi3 ! 174: .text ! 175: .align 4 ! 176: .global .rem ! 177: .proc 04 ! 178: ! ??? This routine could be made faster if was optimized, and if it was ! 179: ! rewritten to only calculate the remainder. ! 180: .rem: ! 181: wr %g0,%g0,%y ! Not a delayed write for sparclite ! 182: mov %o1,%o4 ! 183: tst %o1 ! 184: bl,a 1f ! 185: sub %g0,%o4,%o4 ! 186: 1: tst %o0 ! 187: bl,a 2f ! 188: mov -1,%y ! 189: 2: divscc %o0,%o4,%g1 ! 190: divscc %g1,%o4,%g1 ! 191: divscc %g1,%o4,%g1 ! 192: divscc %g1,%o4,%g1 ! 193: divscc %g1,%o4,%g1 ! 194: divscc %g1,%o4,%g1 ! 195: divscc %g1,%o4,%g1 ! 196: divscc %g1,%o4,%g1 ! 197: divscc %g1,%o4,%g1 ! 198: divscc %g1,%o4,%g1 ! 199: divscc %g1,%o4,%g1 ! 200: divscc %g1,%o4,%g1 ! 201: divscc %g1,%o4,%g1 ! 202: divscc %g1,%o4,%g1 ! 203: divscc %g1,%o4,%g1 ! 204: divscc %g1,%o4,%g1 ! 205: divscc %g1,%o4,%g1 ! 206: divscc %g1,%o4,%g1 ! 207: divscc %g1,%o4,%g1 ! 208: divscc %g1,%o4,%g1 ! 209: divscc %g1,%o4,%g1 ! 210: divscc %g1,%o4,%g1 ! 211: divscc %g1,%o4,%g1 ! 212: divscc %g1,%o4,%g1 ! 213: divscc %g1,%o4,%g1 ! 214: divscc %g1,%o4,%g1 ! 215: divscc %g1,%o4,%g1 ! 216: divscc %g1,%o4,%g1 ! 217: divscc %g1,%o4,%g1 ! 218: divscc %g1,%o4,%g1 ! 219: divscc %g1,%o4,%g1 ! 220: divscc %g1,%o4,%g1 ! 221: be 6f ! 222: mov %y,%o3 ! 223: bg 4f ! 224: addcc %o3,%o4,%g0 ! 225: be,a 6f ! 226: mov %g0,%o3 ! 227: tst %o0 ! 228: bl 5f ! 229: tst %g1 ! 230: ba 5f ! 231: add %o3,%o4,%o3 ! 232: 4: subcc %o3,%o4,%g0 ! 233: be,a 6f ! 234: mov %g0,%o3 ! 235: tst %o0 ! 236: bge 5f ! 237: tst %g1 ! 238: sub %o3,%o4,%o3 ! 239: 5: bl,a 6f ! 240: add %g1,1,%g1 ! 241: 6: tst %o1 ! 242: bl,a 7f ! 243: sub %g0,%g1,%g1 ! 244: 7: retl ! 245: mov %o3,%o0 ! Remainder is in %o3. ! 246: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.