|
|
1.1 ! root 1: ! ! 2: ! SPARC assembler primitives for rsalib.c ! 3: ! written by Branko Lankester, [email protected] 8/29/91 ! 4: ! ! 5: ! Tested with gcc 1.39 and newer, and SunOS cc. ! 6: ! NOTE: does not work with gcc 1.37 (and older?) ! 7: ! ! 8: ! other sources must be compiled with UNIT32 and HIGHFIRST defined ! 9: ! ! 10: #ifndef SYSV ! 11: #ifdef __STDC__ ! 12: #define ENTRY(name) .global _##name ; _##name##: ! 13: #else ! 14: #define ENTRY(name) .global _/**/name ; _/**/name/**/: ! 15: #endif ! 16: #define GLOB _global_precision ! 17: #else /* SYSV */ ! 18: #define ENTRY(name) .global name ; name: ! 19: #define GLOB global_precision ! 20: #endif ! 21: ! 22: .seg "text" ! 23: .proc 4 ! 24: ENTRY(P_SETP) ! 25: retl ! 26: nop ! 27: ! 28: ! 29: .proc 4 ! 30: ENTRY(P_ADDC) ! 31: sethi %hi(GLOB), %o3 ! 32: ldsh [%o3+%lo(GLOB)], %o3 ! 33: and %o2, 1, %o2 ! 34: dec %o3 ! 35: sll %o3, 2, %o3 ! 36: ld [%o0+%o3], %o4 ! 37: add_loop: ! 38: ld [%o1+%o3], %o5 ! 39: subcc %g0, %o2, %g0 ! 40: addxcc %o4, %o5, %o4 ! 41: addx %g0, %g0, %o2 ! 42: st %o4, [%o0+%o3] ! 43: subcc %o3, 4, %o3 ! 44: bge,a add_loop ! 45: ld [%o0+%o3], %o4 ! 46: retl ! 47: mov %o2, %o0 ! return carry ! 48: ! 49: ! 50: .proc 4 ! 51: ENTRY(P_SUBB) ! 52: sethi %hi(GLOB), %o3 ! 53: ldsh [%o3+%lo(GLOB)], %o3 ! 54: and %o2, 1, %o2 ! 55: dec %o3 ! 56: sll %o3, 2, %o3 ! 57: ld [%o0+%o3], %o4 ! 58: sub_loop: ! 59: ld [%o1+%o3], %o5 ! 60: subcc %g0, %o2, %g0 ! 61: subxcc %o4, %o5, %o4 ! 62: addx %g0, %g0, %o2 ! 63: st %o4, [%o0+%o3] ! 64: subcc %o3, 4, %o3 ! 65: bge,a sub_loop ! 66: ld [%o0+%o3], %o4 ! 67: retl ! 68: mov %o2, %o0 ! 69: ! 70: ! 71: .proc 4 ! 72: ENTRY(P_ROTL) ! 73: sethi %hi(GLOB), %o3 ! 74: ldsh [%o3+%lo(GLOB)], %o3 ! 75: and %o1, 1, %o1 ! 76: dec %o3 ! 77: sll %o3, 2, %o3 ! 78: ld [%o0+%o3], %o4 ! 79: rot_loop: ! 80: sll %o4, 1, %o5 ! 81: or %o5, %o1, %o5 ! 82: st %o5, [%o0+%o3] ! 83: srl %o4, 31, %o1 ! 84: subcc %o3, 4, %o3 ! 85: bge,a rot_loop ! 86: ld [%o0+%o3], %o4 ! 87: retl ! 88: mov %o1, %o0 ! 89: ! 90: .seg "data" ! 91:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.