/* Setting this to 1 creates a very comprehensive test of
integer condition codes. */
-#define TEST_INTEGER_VERBOSE 0
+#define TEST_INTEGER_VERBOSE 1
//#define LINUX_VM86_IOPL_FIX
: "=r" (res)\
: "r" (v1), "r" (v2));\
printf("%-10s %d\n", "set" JCC, res);\
- {\
+ { int one = 1; \
asm("movl $0x12345678, %0\n\t"\
"cmpl %2, %1\n\t"\
"cmov" JCC "l %3, %0\n\t"\
: "=r" (res)\
- : "r" (v1), "r" (v2), "m" (1));\
+ : "r" (v1), "r" (v2), "m" (one));\
printf("%-10s R=0x%08x\n", "cmov" JCC "l", res);\
asm("movl $0x12345678, %0\n\t"\
"cmpl %2, %1\n\t"\
{\
int res, val, resz;\
val = op0;\
- asm("xorl %1, %1\n"\
- "movl $0x12345678, %0\n"\
- #op " %" size "2, %" size "0 ; setz %b1" \
+ asm("xorl %1, %1\n\t"\
+ "movl $0x12345678, %0\n\t"\
+ #op " %" size "2, %" size "0\n\t" \
+ "setz %b1" \
: "=r" (res), "=q" (resz)\
- : "g" (val));\
+ : "r" (val));\
printf("%-10s A=%08x R=%08x %d\n", #op, val, res, resz);\
}
/* test all roundings */
asm volatile ("fstcw %0" : "=m" (fpuc));
for(i=0;i<4;i++) {
- asm volatile ("fldcw %0" : : "m" ((fpuc & ~0x0c00) | (i << 10)));
+ int16_t tmp = (fpuc & ~0x0c00) | (i << 10);
+ asm volatile ("fldcw %0" : : "m" (tmp));
asm volatile ("fist %0" : "=m" (wa) : "t" (a));
asm volatile ("fistl %0" : "=m" (ia) : "t" (a));
asm volatile ("fistpll %0" : "=m" (lla) : "t" (a) : "st");
+#define FULLTXT 1
+
#define exec_op glue(exec_, OP)
#define exec_opl glue(glue(exec_, OP), l)
#define exec_opw glue(glue(exec_, OP), w)
res = s0;
flags = iflags;
EXECOP1("", res, flags);
- printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "l", s0, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "l", s0, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
+
}
inline void exec_opw(int s0, int s1, int iflags)
{
res = s0;
flags = iflags;
EXECOP1("w", res, flags);
- printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "w", s0, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "w", s0, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
+
}
inline void exec_opb(int s0, int s1, int iflags)
{
res = s0;
flags = iflags;
EXECOP1("b", res, flags);
- printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "b", s0, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "b", s0, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
+
}
#else
inline void exec_opl(int s0, int s1, int iflags)
res = s0;
flags = iflags;
EXECOP2("", res, s1, flags);
- printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "l", s0, s1, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "l", s0, s1, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
}
inline void exec_opw(int s0, int s1, int iflags)
res = s0;
flags = iflags;
EXECOP2("w", res, s1, flags);
- printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "w", s0, s1, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "w", s0, s1, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
}
inline void exec_opb(int s0, int s1, int iflags)
res = s0;
flags = iflags;
EXECOP2("b", res, s1, flags);
- printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
- stringify(OP) "b", s0, s1, res, iflags, flags & CC_MASK);
+ if (FULLTXT)
+ printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
+ stringify(OP) "b", s0, s1, res, iflags, flags & CC_MASK);
+ else
+ printf("%08x %04x %04x\n",
+ res, iflags, flags & CC_MASK);
}
#endif
#undef OP
#undef OP_CC
+
+#undef FULLTXT