|
|
1.1 ! root 1: ! 2: #define exec_op glue(exec_, OP) ! 3: #define exec_opq glue(glue(exec_, OP), q) ! 4: #define exec_opl glue(glue(exec_, OP), l) ! 5: #define exec_opw glue(glue(exec_, OP), w) ! 6: #define exec_opb glue(glue(exec_, OP), b) ! 7: ! 8: #define EXECOP2(size, rsize, res, s1, flags) \ ! 9: asm ("push %4\n\t"\ ! 10: "popf\n\t"\ ! 11: stringify(OP) size " %" rsize "2, %" rsize "0\n\t" \ ! 12: "pushf\n\t"\ ! 13: "pop %1\n\t"\ ! 14: : "=q" (res), "=g" (flags)\ ! 15: : "q" (s1), "0" (res), "1" (flags)); \ ! 16: printf("%-10s A=" FMTLX " B=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n", \ ! 17: stringify(OP) size, s0, s1, res, iflags, flags & CC_MASK); ! 18: ! 19: #define EXECOP1(size, rsize, res, flags) \ ! 20: asm ("push %3\n\t"\ ! 21: "popf\n\t"\ ! 22: stringify(OP) size " %" rsize "0\n\t" \ ! 23: "pushf\n\t"\ ! 24: "pop %1\n\t"\ ! 25: : "=q" (res), "=g" (flags)\ ! 26: : "0" (res), "1" (flags)); \ ! 27: printf("%-10s A=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n", \ ! 28: stringify(OP) size, s0, res, iflags, flags & CC_MASK); ! 29: ! 30: #ifdef OP1 ! 31: #if defined(__x86_64__) ! 32: void exec_opq(long s0, long s1, long iflags) ! 33: { ! 34: long res, flags; ! 35: res = s0; ! 36: flags = iflags; ! 37: EXECOP1("q", "", res, flags); ! 38: } ! 39: #endif ! 40: ! 41: void exec_opl(long s0, long s1, long iflags) ! 42: { ! 43: long res, flags; ! 44: res = s0; ! 45: flags = iflags; ! 46: EXECOP1("l", "k", res, flags); ! 47: } ! 48: ! 49: void exec_opw(long s0, long s1, long iflags) ! 50: { ! 51: long res, flags; ! 52: res = s0; ! 53: flags = iflags; ! 54: EXECOP1("w", "w", res, flags); ! 55: } ! 56: ! 57: void exec_opb(long s0, long s1, long iflags) ! 58: { ! 59: long res, flags; ! 60: res = s0; ! 61: flags = iflags; ! 62: EXECOP1("b", "b", res, flags); ! 63: } ! 64: #else ! 65: #if defined(__x86_64__) ! 66: void exec_opq(long s0, long s1, long iflags) ! 67: { ! 68: long res, flags; ! 69: res = s0; ! 70: flags = iflags; ! 71: EXECOP2("q", "", res, s1, flags); ! 72: } ! 73: #endif ! 74: ! 75: void exec_opl(long s0, long s1, long iflags) ! 76: { ! 77: long res, flags; ! 78: res = s0; ! 79: flags = iflags; ! 80: EXECOP2("l", "k", res, s1, flags); ! 81: } ! 82: ! 83: void exec_opw(long s0, long s1, long iflags) ! 84: { ! 85: long res, flags; ! 86: res = s0; ! 87: flags = iflags; ! 88: EXECOP2("w", "w", res, s1, flags); ! 89: } ! 90: ! 91: void exec_opb(long s0, long s1, long iflags) ! 92: { ! 93: long res, flags; ! 94: res = s0; ! 95: flags = iflags; ! 96: EXECOP2("b", "b", res, s1, flags); ! 97: } ! 98: #endif ! 99: ! 100: void exec_op(long s0, long s1) ! 101: { ! 102: s0 = i2l(s0); ! 103: s1 = i2l(s1); ! 104: #if defined(__x86_64__) ! 105: exec_opq(s0, s1, 0); ! 106: #endif ! 107: exec_opl(s0, s1, 0); ! 108: exec_opw(s0, s1, 0); ! 109: exec_opb(s0, s1, 0); ! 110: #ifdef OP_CC ! 111: #if defined(__x86_64__) ! 112: exec_opq(s0, s1, CC_C); ! 113: #endif ! 114: exec_opl(s0, s1, CC_C); ! 115: exec_opw(s0, s1, CC_C); ! 116: exec_opb(s0, s1, CC_C); ! 117: #endif ! 118: } ! 119: ! 120: void glue(test_, OP)(void) ! 121: { ! 122: exec_op(0x12345678, 0x812FADA); ! 123: exec_op(0x12341, 0x12341); ! 124: exec_op(0x12341, -0x12341); ! 125: exec_op(0xffffffff, 0); ! 126: exec_op(0xffffffff, -1); ! 127: exec_op(0xffffffff, 1); ! 128: exec_op(0xffffffff, 2); ! 129: exec_op(0x7fffffff, 0); ! 130: exec_op(0x7fffffff, 1); ! 131: exec_op(0x7fffffff, -1); ! 132: exec_op(0x80000000, -1); ! 133: exec_op(0x80000000, 1); ! 134: exec_op(0x80000000, -2); ! 135: exec_op(0x12347fff, 0); ! 136: exec_op(0x12347fff, 1); ! 137: exec_op(0x12347fff, -1); ! 138: exec_op(0x12348000, -1); ! 139: exec_op(0x12348000, 1); ! 140: exec_op(0x12348000, -2); ! 141: exec_op(0x12347f7f, 0); ! 142: exec_op(0x12347f7f, 1); ! 143: exec_op(0x12347f7f, -1); ! 144: exec_op(0x12348080, -1); ! 145: exec_op(0x12348080, 1); ! 146: exec_op(0x12348080, -2); ! 147: } ! 148: ! 149: void *glue(_test_, OP) __init_call = glue(test_, OP); ! 150: ! 151: #undef OP ! 152: #undef OP_CC
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.