129b8de00SIlya Leoshkevich #include <assert.h> 229b8de00SIlya Leoshkevich #include <stdint.h> 329b8de00SIlya Leoshkevich 429b8de00SIlya Leoshkevich static void test_dr(void) 529b8de00SIlya Leoshkevich { 629b8de00SIlya Leoshkevich register int32_t r0 asm("r0") = -1; 729b8de00SIlya Leoshkevich register int32_t r1 asm("r1") = -4241; 829b8de00SIlya Leoshkevich int32_t b = 101, q, r; 929b8de00SIlya Leoshkevich 1029b8de00SIlya Leoshkevich asm("dr %[r0],%[b]" 1129b8de00SIlya Leoshkevich : [r0] "+r" (r0), [r1] "+r" (r1) 1229b8de00SIlya Leoshkevich : [b] "r" (b) 1329b8de00SIlya Leoshkevich : "cc"); 1429b8de00SIlya Leoshkevich q = r1; 1529b8de00SIlya Leoshkevich r = r0; 1629b8de00SIlya Leoshkevich assert(q == -41); 1729b8de00SIlya Leoshkevich assert(r == -100); 1829b8de00SIlya Leoshkevich } 1929b8de00SIlya Leoshkevich 2029b8de00SIlya Leoshkevich static void test_dlr(void) 2129b8de00SIlya Leoshkevich { 2229b8de00SIlya Leoshkevich register uint32_t r0 asm("r0") = 0; 2329b8de00SIlya Leoshkevich register uint32_t r1 asm("r1") = 4243; 2429b8de00SIlya Leoshkevich uint32_t b = 101, q, r; 2529b8de00SIlya Leoshkevich 2629b8de00SIlya Leoshkevich asm("dlr %[r0],%[b]" 2729b8de00SIlya Leoshkevich : [r0] "+r" (r0), [r1] "+r" (r1) 2829b8de00SIlya Leoshkevich : [b] "r" (b) 2929b8de00SIlya Leoshkevich : "cc"); 3029b8de00SIlya Leoshkevich q = r1; 3129b8de00SIlya Leoshkevich r = r0; 3229b8de00SIlya Leoshkevich assert(q == 42); 3329b8de00SIlya Leoshkevich assert(r == 1); 3429b8de00SIlya Leoshkevich } 3529b8de00SIlya Leoshkevich 36*4e5712f9SRichard Henderson static void test_dsgr(void) 37*4e5712f9SRichard Henderson { 38*4e5712f9SRichard Henderson register int64_t r0 asm("r0") = -1; 39*4e5712f9SRichard Henderson register int64_t r1 asm("r1") = -4241; 40*4e5712f9SRichard Henderson int64_t b = 101, q, r; 41*4e5712f9SRichard Henderson 42*4e5712f9SRichard Henderson asm("dsgr %[r0],%[b]" 43*4e5712f9SRichard Henderson : [r0] "+r" (r0), [r1] "+r" (r1) 44*4e5712f9SRichard Henderson : [b] "r" (b) 45*4e5712f9SRichard Henderson : "cc"); 46*4e5712f9SRichard Henderson q = r1; 47*4e5712f9SRichard Henderson r = r0; 48*4e5712f9SRichard Henderson assert(q == -41); 49*4e5712f9SRichard Henderson assert(r == -100); 50*4e5712f9SRichard Henderson } 51*4e5712f9SRichard Henderson 52*4e5712f9SRichard Henderson static void test_dlgr(void) 53*4e5712f9SRichard Henderson { 54*4e5712f9SRichard Henderson register uint64_t r0 asm("r0") = 0; 55*4e5712f9SRichard Henderson register uint64_t r1 asm("r1") = 4243; 56*4e5712f9SRichard Henderson uint64_t b = 101, q, r; 57*4e5712f9SRichard Henderson 58*4e5712f9SRichard Henderson asm("dlgr %[r0],%[b]" 59*4e5712f9SRichard Henderson : [r0] "+r" (r0), [r1] "+r" (r1) 60*4e5712f9SRichard Henderson : [b] "r" (b) 61*4e5712f9SRichard Henderson : "cc"); 62*4e5712f9SRichard Henderson q = r1; 63*4e5712f9SRichard Henderson r = r0; 64*4e5712f9SRichard Henderson assert(q == 42); 65*4e5712f9SRichard Henderson assert(r == 1); 66*4e5712f9SRichard Henderson } 67*4e5712f9SRichard Henderson 6829b8de00SIlya Leoshkevich int main(void) 6929b8de00SIlya Leoshkevich { 7029b8de00SIlya Leoshkevich test_dr(); 7129b8de00SIlya Leoshkevich test_dlr(); 72*4e5712f9SRichard Henderson test_dsgr(); 73*4e5712f9SRichard Henderson test_dlgr(); 74*4e5712f9SRichard Henderson return 0; 7529b8de00SIlya Leoshkevich } 76