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