Revision d575b78a
b/tests/test-i386.c | ||
---|---|---|
832 | 832 |
TEST_XCHG(xaddw, "w", "=q"); |
833 | 833 |
TEST_XCHG(xaddb, "b", "=q"); |
834 | 834 |
|
835 |
{ |
|
836 |
int res; |
|
837 |
res = 0x12345678; |
|
838 |
asm("xaddl %1, %0" : "=r" (res) : "0" (res)); |
|
839 |
printf("xaddl same res=%08x\n", res); |
|
840 |
} |
|
841 |
|
|
835 | 842 |
TEST_XCHG(xaddl, "", "=m"); |
836 | 843 |
TEST_XCHG(xaddw, "w", "=m"); |
837 | 844 |
TEST_XCHG(xaddb, "b", "=m"); |
... | ... | |
851 | 858 |
TEST_CMPXCHG(cmpxchgl, "", "=m", 0xfffefdfc); |
852 | 859 |
TEST_CMPXCHG(cmpxchgw, "w", "=m", 0xfffefdfc); |
853 | 860 |
TEST_CMPXCHG(cmpxchgb, "b", "=m", 0xfffefdfc); |
861 |
|
|
862 |
{ |
|
863 |
uint64_t op0, op1, op2; |
|
864 |
int i, eflags; |
|
865 |
|
|
866 |
for(i = 0; i < 2; i++) { |
|
867 |
op0 = 0x123456789abcd; |
|
868 |
if (i == 0) |
|
869 |
op1 = 0xfbca765423456; |
|
870 |
else |
|
871 |
op1 = op0; |
|
872 |
op2 = 0x6532432432434; |
|
873 |
asm("cmpxchg8b %1\n" |
|
874 |
"pushf\n" |
|
875 |
"popl %2\n" |
|
876 |
: "=A" (op0), "=m" (op1), "=g" (eflags) |
|
877 |
: "0" (op0), "m" (op1), "b" ((int)op2), "c" ((int)(op2 >> 32))); |
|
878 |
printf("cmpxchg8b: op0=%016llx op1=%016llx CC=%02x\n", |
|
879 |
op0, op1, eflags & CC_Z); |
|
880 |
} |
|
881 |
} |
|
854 | 882 |
} |
855 | 883 |
|
856 | 884 |
/**********************************************/ |
Also available in: Unified diff