Annotation of qemu/tests/test-i386-shift.h, revision 1.1.1.1

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: #ifndef OP_SHIFTD
                      9: 
                     10: #ifdef OP_NOBYTE
                     11: #define EXECSHIFT(size, rsize, res, s1, s2, flags) \
                     12:     asm ("push %4\n\t"\
                     13:          "popf\n\t"\
                     14:          stringify(OP) size " %" rsize "2, %" rsize "0\n\t" \
                     15:          "pushf\n\t"\
                     16:          "pop %1\n\t"\
                     17:          : "=g" (res), "=g" (flags)\
                     18:          : "r" (s1), "0" (res), "1" (flags));
                     19: #else
                     20: #define EXECSHIFT(size, rsize, res, s1, s2, flags) \
                     21:     asm ("push %4\n\t"\
                     22:          "popf\n\t"\
                     23:          stringify(OP) size " %%cl, %" rsize "0\n\t" \
                     24:          "pushf\n\t"\
                     25:          "pop %1\n\t"\
                     26:          : "=q" (res), "=g" (flags)\
                     27:          : "c" (s1), "0" (res), "1" (flags));
                     28: #endif
                     29: 
                     30: #if defined(__x86_64__)
                     31: void exec_opq(long s2, long s0, long s1, long iflags)
                     32: {
                     33:     long res, flags;
                     34:     res = s0;
                     35:     flags = iflags;
                     36:     EXECSHIFT("q", "", res, s1, s2, flags);
                     37:     /* overflow is undefined if count != 1 */
                     38:     if (s1 != 1)
                     39:       flags &= ~CC_O;
                     40:     printf("%-10s A=" FMTLX " B=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                     41:            stringify(OP) "q", s0, s1, res, iflags, flags & CC_MASK);
                     42: }
                     43: #endif
                     44: 
                     45: void exec_opl(long s2, long s0, long s1, long iflags)
                     46: {
                     47:     long res, flags;
                     48:     res = s0;
                     49:     flags = iflags;
                     50:     EXECSHIFT("l", "k", res, s1, s2, flags);
                     51:     /* overflow is undefined if count != 1 */
                     52:     if (s1 != 1)
                     53:       flags &= ~CC_O;
                     54:     printf("%-10s A=" FMTLX " B=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                     55:            stringify(OP) "l", s0, s1, res, iflags, flags & CC_MASK);
                     56: }
                     57: 
                     58: void exec_opw(long s2, long s0, long s1, long iflags)
                     59: {
                     60:     long res, flags;
                     61:     res = s0;
                     62:     flags = iflags;
                     63:     EXECSHIFT("w", "w", res, s1, s2, flags);
                     64:     /* overflow is undefined if count != 1 */
                     65:     if (s1 != 1)
                     66:       flags &= ~CC_O;
                     67:     printf("%-10s A=" FMTLX " B=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                     68:            stringify(OP) "w", s0, s1, res, iflags, flags & CC_MASK);
                     69: }
                     70: 
                     71: #else
                     72: #define EXECSHIFT(size, rsize, res, s1, s2, flags) \
                     73:     asm ("push %4\n\t"\
                     74:          "popf\n\t"\
                     75:          stringify(OP) size " %%cl, %" rsize "5, %" rsize "0\n\t" \
                     76:          "pushf\n\t"\
                     77:          "pop %1\n\t"\
                     78:          : "=g" (res), "=g" (flags)\
                     79:          : "c" (s1), "0" (res), "1" (flags), "r" (s2));
                     80: 
                     81: #if defined(__x86_64__)
                     82: void exec_opq(long s2, long s0, long s1, long iflags)
                     83: {
                     84:     long res, flags;
                     85:     res = s0;
                     86:     flags = iflags;
                     87:     EXECSHIFT("q", "", res, s1, s2, flags);
                     88:     /* overflow is undefined if count != 1 */
                     89:     if (s1 != 1)
                     90:       flags &= ~CC_O;
                     91:     printf("%-10s A=" FMTLX " B=" FMTLX " C=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                     92:            stringify(OP) "q", s0, s2, s1, res, iflags, flags & CC_MASK);
                     93: }
                     94: #endif
                     95: 
                     96: void exec_opl(long s2, long s0, long s1, long iflags)
                     97: {
                     98:     long res, flags;
                     99:     res = s0;
                    100:     flags = iflags;
                    101:     EXECSHIFT("l", "k", res, s1, s2, flags);
                    102:     /* overflow is undefined if count != 1 */
                    103:     if (s1 != 1)
                    104:       flags &= ~CC_O;
                    105:     printf("%-10s A=" FMTLX " B=" FMTLX " C=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                    106:            stringify(OP) "l", s0, s2, s1, res, iflags, flags & CC_MASK);
                    107: }
                    108: 
                    109: void exec_opw(long s2, long s0, long s1, long iflags)
                    110: {
                    111:     long res, flags;
                    112:     res = s0;
                    113:     flags = iflags;
                    114:     EXECSHIFT("w", "w", res, s1, s2, flags);
                    115:     /* overflow is undefined if count != 1 */
                    116:     if (s1 != 1)
                    117:       flags &= ~CC_O;
                    118:     printf("%-10s A=" FMTLX " B=" FMTLX " C=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                    119:            stringify(OP) "w", s0, s2, s1, res, iflags, flags & CC_MASK);
                    120: }
                    121: 
                    122: #endif
                    123: 
                    124: #ifndef OP_NOBYTE
                    125: void exec_opb(long s0, long s1, long iflags)
                    126: {
                    127:     long res, flags;
                    128:     res = s0;
                    129:     flags = iflags;
                    130:     EXECSHIFT("b", "b", res, s1, 0, flags);
                    131:     /* overflow is undefined if count != 1 */
                    132:     if (s1 != 1)
                    133:       flags &= ~CC_O;
                    134:     printf("%-10s A=" FMTLX " B=" FMTLX " R=" FMTLX " CCIN=%04lx CC=%04lx\n",
                    135:            stringify(OP) "b", s0, s1, res, iflags, flags & CC_MASK);
                    136: }
                    137: #endif
                    138: 
                    139: void exec_op(long s2, long s0, long s1)
                    140: {
                    141:     s2 = i2l(s2);
                    142:     s0 = i2l(s0);
                    143: #if defined(__x86_64__)
                    144:     exec_opq(s2, s0, s1, 0);
                    145: #endif
                    146:     exec_opl(s2, s0, s1, 0);
                    147: #ifdef OP_SHIFTD
                    148:     if (s1 <= 15)
                    149:         exec_opw(s2, s0, s1, 0);
                    150: #else
                    151:     exec_opw(s2, s0, s1, 0);
                    152: #endif
                    153: #ifndef OP_NOBYTE
                    154:     exec_opb(s0, s1, 0);
                    155: #endif
                    156: #ifdef OP_CC
                    157: #if defined(__x86_64__)
                    158:     exec_opq(s2, s0, s1, CC_C);
                    159: #endif
                    160:     exec_opl(s2, s0, s1, CC_C);
                    161:     exec_opw(s2, s0, s1, CC_C);
                    162:     exec_opb(s0, s1, CC_C);
                    163: #endif
                    164: }
                    165: 
                    166: void glue(test_, OP)(void)
                    167: {
                    168:     int i, n;
                    169: #if defined(__x86_64__)
                    170:     n = 64;
                    171: #else
                    172:     n = 32;
                    173: #endif
                    174:     for(i = 0; i < n; i++)
                    175:         exec_op(0x21ad3d34, 0x12345678, i);
                    176:     for(i = 0; i < n; i++)
                    177:         exec_op(0x813f3421, 0x82345678, i);
                    178: }
                    179: 
                    180: void *glue(_test_, OP) __init_call = glue(test_, OP);
                    181: 
                    182: #undef OP
                    183: #undef OP_CC
                    184: #undef OP_SHIFTD
                    185: #undef OP_NOBYTE
                    186: #undef EXECSHIFT
                    187: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.