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 3629b8de00SIlya Leoshkevich int main(void) 3729b8de00SIlya Leoshkevich { 3829b8de00SIlya Leoshkevich test_dr(); 3929b8de00SIlya Leoshkevich test_dlr(); 4029b8de00SIlya Leoshkevich } 41