1*29b8de00SIlya Leoshkevich #include <assert.h> 2*29b8de00SIlya Leoshkevich #include <stdint.h> 3*29b8de00SIlya Leoshkevich 4*29b8de00SIlya Leoshkevich static void test_dr(void) 5*29b8de00SIlya Leoshkevich { 6*29b8de00SIlya Leoshkevich register int32_t r0 asm("r0") = -1; 7*29b8de00SIlya Leoshkevich register int32_t r1 asm("r1") = -4241; 8*29b8de00SIlya Leoshkevich int32_t b = 101, q, r; 9*29b8de00SIlya Leoshkevich 10*29b8de00SIlya Leoshkevich asm("dr %[r0],%[b]" 11*29b8de00SIlya Leoshkevich : [r0] "+r" (r0), [r1] "+r" (r1) 12*29b8de00SIlya Leoshkevich : [b] "r" (b) 13*29b8de00SIlya Leoshkevich : "cc"); 14*29b8de00SIlya Leoshkevich q = r1; 15*29b8de00SIlya Leoshkevich r = r0; 16*29b8de00SIlya Leoshkevich assert(q == -41); 17*29b8de00SIlya Leoshkevich assert(r == -100); 18*29b8de00SIlya Leoshkevich } 19*29b8de00SIlya Leoshkevich 20*29b8de00SIlya Leoshkevich static void test_dlr(void) 21*29b8de00SIlya Leoshkevich { 22*29b8de00SIlya Leoshkevich register uint32_t r0 asm("r0") = 0; 23*29b8de00SIlya Leoshkevich register uint32_t r1 asm("r1") = 4243; 24*29b8de00SIlya Leoshkevich uint32_t b = 101, q, r; 25*29b8de00SIlya Leoshkevich 26*29b8de00SIlya Leoshkevich asm("dlr %[r0],%[b]" 27*29b8de00SIlya Leoshkevich : [r0] "+r" (r0), [r1] "+r" (r1) 28*29b8de00SIlya Leoshkevich : [b] "r" (b) 29*29b8de00SIlya Leoshkevich : "cc"); 30*29b8de00SIlya Leoshkevich q = r1; 31*29b8de00SIlya Leoshkevich r = r0; 32*29b8de00SIlya Leoshkevich assert(q == 42); 33*29b8de00SIlya Leoshkevich assert(r == 1); 34*29b8de00SIlya Leoshkevich } 35*29b8de00SIlya Leoshkevich 36*29b8de00SIlya Leoshkevich int main(void) 37*29b8de00SIlya Leoshkevich { 38*29b8de00SIlya Leoshkevich test_dr(); 39*29b8de00SIlya Leoshkevich test_dlr(); 40*29b8de00SIlya Leoshkevich } 41