|
|
1.1 ! root 1: /* ! 2: ! 3: Copyright 1992 Eric R. Smith. All rights reserved. ! 4: ! 5: */ ! 6: ! 7: ! 8: ! 9: /* ! 10: ! 11: * inlining of various utility functions, for speed ! 12: ! 13: * NOTE: ALL functions in this file must also have ! 14: ! 15: * "normal" equivalents in the .c or .s files; ! 16: ! 17: * don't put a function just into here! ! 18: ! 19: */ ! 20: ! 21: ! 22: ! 23: #ifdef __GNUC__ ! 24: ! 25: ! 26: ! 27: #define spl7() \ ! 28: ! 29: ({ register short retvalue; \ ! 30: ! 31: __asm__ volatile(" \ ! 32: ! 33: movew sr,%0; \ ! 34: ! 35: oriw #0x0700,sr " \ ! 36: ! 37: : "=r"(retvalue) \ ! 38: ! 39: ); retvalue; }) ! 40: ! 41: ! 42: ! 43: #define spl(N) \ ! 44: ! 45: ({ \ ! 46: ! 47: __asm__ volatile(" \ ! 48: ! 49: movew %0,sr " \ ! 50: ! 51: : \ ! 52: ! 53: : "g"(N) ); }) ! 54: ! 55: ! 56: ! 57: ! 58: ! 59: /* ! 60: ! 61: * note that we must save some registers ourselves, ! 62: ! 63: * or else gcc will run out of reggies to use ! 64: ! 65: * and complain ! 66: ! 67: */ ! 68: ! 69: ! 70: ! 71: #define callout1(func, a) \ ! 72: ! 73: ({ \ ! 74: ! 75: register long retvalue __asm__("d0"); \ ! 76: ! 77: long _f = func; \ ! 78: ! 79: short _a = (short)(a); \ ! 80: ! 81: \ ! 82: ! 83: __asm__ volatile \ ! 84: ! 85: (" moveml d5-d7/a4-a6,sp@-; \ ! 86: ! 87: movew %2,sp@-; \ ! 88: ! 89: jsr %1@; \ ! 90: ! 91: addqw #2,sp; \ ! 92: ! 93: moveml sp@+,d5-d7/a4-a6 " \ ! 94: ! 95: : "=r"(retvalue) /* outputs */ \ ! 96: ! 97: : "a"(_f), "r"(_a) /* inputs */ \ ! 98: ! 99: : "d0", "d1", "d2", "d3", "d4", \ ! 100: ! 101: "a0", "a1", "a2", "a3" /* clobbered regs */ \ ! 102: ! 103: ); \ ! 104: ! 105: retvalue; \ ! 106: ! 107: }) ! 108: ! 109: ! 110: ! 111: #define callout2(func, a, b) \ ! 112: ! 113: ({ \ ! 114: ! 115: register long retvalue __asm__("d0"); \ ! 116: ! 117: long _f = func; \ ! 118: ! 119: short _a = (short)(a); \ ! 120: ! 121: short _b = (short)(b); \ ! 122: ! 123: \ ! 124: ! 125: __asm__ volatile \ ! 126: ! 127: (" moveml d5-d7/a4-a6,sp@-; \ ! 128: ! 129: movew %3,sp@-; \ ! 130: ! 131: movew %2,sp@-; \ ! 132: ! 133: jsr %1@; \ ! 134: ! 135: addqw #4,sp; \ ! 136: ! 137: moveml sp@+,d5-d7/a4-a6 " \ ! 138: ! 139: : "=r"(retvalue) /* outputs */ \ ! 140: ! 141: : "a"(_f), "r"(_a), "r"(_b) /* inputs */ \ ! 142: ! 143: : "d0", "d1", "d2", "d3", "d4", \ ! 144: ! 145: "a0", "a1", "a2", "a3" /* clobbered regs */ \ ! 146: ! 147: ); \ ! 148: ! 149: retvalue; \ ! 150: ! 151: }) ! 152: ! 153: ! 154: ! 155: #endif ! 156: ! 157: ! 158: ! 159: #ifdef LATTICE ! 160: ! 161: #pragma inline d0=spl7() {"40c0007c0700";} ! 162: ! 163: #pragma inline d0=spl(d0) {"46c0";} ! 164: ! 165: #endif ! 166:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.