| #include <assert.h> |
| #include <stdint.h> |
| |
| static void test_dr(void) |
| { |
| register int32_t r0 asm("r0") = -1; |
| register int32_t r1 asm("r1") = -4241; |
| int32_t b = 101, q, r; |
| |
| asm("dr %[r0],%[b]" |
| : [r0] "+r" (r0), [r1] "+r" (r1) |
| : [b] "r" (b) |
| : "cc"); |
| q = r1; |
| r = r0; |
| assert(q == -41); |
| assert(r == -100); |
| } |
| |
| static void test_dlr(void) |
| { |
| register uint32_t r0 asm("r0") = 0; |
| register uint32_t r1 asm("r1") = 4243; |
| uint32_t b = 101, q, r; |
| |
| asm("dlr %[r0],%[b]" |
| : [r0] "+r" (r0), [r1] "+r" (r1) |
| : [b] "r" (b) |
| : "cc"); |
| q = r1; |
| r = r0; |
| assert(q == 42); |
| assert(r == 1); |
| } |
| |
| static void test_dsgr(void) |
| { |
| register int64_t r0 asm("r0") = -1; |
| register int64_t r1 asm("r1") = -4241; |
| int64_t b = 101, q, r; |
| |
| asm("dsgr %[r0],%[b]" |
| : [r0] "+r" (r0), [r1] "+r" (r1) |
| : [b] "r" (b) |
| : "cc"); |
| q = r1; |
| r = r0; |
| assert(q == -41); |
| assert(r == -100); |
| } |
| |
| static void test_dlgr(void) |
| { |
| register uint64_t r0 asm("r0") = 0; |
| register uint64_t r1 asm("r1") = 4243; |
| uint64_t b = 101, q, r; |
| |
| asm("dlgr %[r0],%[b]" |
| : [r0] "+r" (r0), [r1] "+r" (r1) |
| : [b] "r" (b) |
| : "cc"); |
| q = r1; |
| r = r0; |
| assert(q == 42); |
| assert(r == 1); |
| } |
| |
| int main(void) |
| { |
| test_dr(); |
| test_dlr(); |
| test_dsgr(); |
| test_dlgr(); |
| return 0; |
| } |