xref: /qemu/tests/tcg/s390x/div.c (revision 4e5712f9)
129b8de00SIlya Leoshkevich #include <assert.h>
229b8de00SIlya Leoshkevich #include <stdint.h>
329b8de00SIlya Leoshkevich 
test_dr(void)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 
test_dlr(void)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 
test_dsgr(void)364e5712f9SRichard Henderson static void test_dsgr(void)
374e5712f9SRichard Henderson {
384e5712f9SRichard Henderson     register int64_t r0 asm("r0") = -1;
394e5712f9SRichard Henderson     register int64_t r1 asm("r1") = -4241;
404e5712f9SRichard Henderson     int64_t b = 101, q, r;
414e5712f9SRichard Henderson 
424e5712f9SRichard Henderson     asm("dsgr %[r0],%[b]"
434e5712f9SRichard Henderson         : [r0] "+r" (r0), [r1] "+r" (r1)
444e5712f9SRichard Henderson         : [b] "r" (b)
454e5712f9SRichard Henderson         : "cc");
464e5712f9SRichard Henderson     q = r1;
474e5712f9SRichard Henderson     r = r0;
484e5712f9SRichard Henderson     assert(q == -41);
494e5712f9SRichard Henderson     assert(r == -100);
504e5712f9SRichard Henderson }
514e5712f9SRichard Henderson 
test_dlgr(void)524e5712f9SRichard Henderson static void test_dlgr(void)
534e5712f9SRichard Henderson {
544e5712f9SRichard Henderson     register uint64_t r0 asm("r0") = 0;
554e5712f9SRichard Henderson     register uint64_t r1 asm("r1") = 4243;
564e5712f9SRichard Henderson     uint64_t b = 101, q, r;
574e5712f9SRichard Henderson 
584e5712f9SRichard Henderson     asm("dlgr %[r0],%[b]"
594e5712f9SRichard Henderson         : [r0] "+r" (r0), [r1] "+r" (r1)
604e5712f9SRichard Henderson         : [b] "r" (b)
614e5712f9SRichard Henderson         : "cc");
624e5712f9SRichard Henderson     q = r1;
634e5712f9SRichard Henderson     r = r0;
644e5712f9SRichard Henderson     assert(q == 42);
654e5712f9SRichard Henderson     assert(r == 1);
664e5712f9SRichard Henderson }
674e5712f9SRichard Henderson 
main(void)6829b8de00SIlya Leoshkevich int main(void)
6929b8de00SIlya Leoshkevich {
7029b8de00SIlya Leoshkevich     test_dr();
7129b8de00SIlya Leoshkevich     test_dlr();
724e5712f9SRichard Henderson     test_dsgr();
734e5712f9SRichard Henderson     test_dlgr();
744e5712f9SRichard Henderson     return 0;
7529b8de00SIlya Leoshkevich }
76