xref: /qemu/tests/tcg/s390x/div.c (revision 29b8de00)
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