xref: /openbmc/qemu/tests/tcg/s390x/div.c (revision b52388129bf0097954515c097e83e6112de1b579)
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)36*4e5712f9SRichard Henderson static void test_dsgr(void)
37*4e5712f9SRichard Henderson {
38*4e5712f9SRichard Henderson     register int64_t r0 asm("r0") = -1;
39*4e5712f9SRichard Henderson     register int64_t r1 asm("r1") = -4241;
40*4e5712f9SRichard Henderson     int64_t b = 101, q, r;
41*4e5712f9SRichard Henderson 
42*4e5712f9SRichard Henderson     asm("dsgr %[r0],%[b]"
43*4e5712f9SRichard Henderson         : [r0] "+r" (r0), [r1] "+r" (r1)
44*4e5712f9SRichard Henderson         : [b] "r" (b)
45*4e5712f9SRichard Henderson         : "cc");
46*4e5712f9SRichard Henderson     q = r1;
47*4e5712f9SRichard Henderson     r = r0;
48*4e5712f9SRichard Henderson     assert(q == -41);
49*4e5712f9SRichard Henderson     assert(r == -100);
50*4e5712f9SRichard Henderson }
51*4e5712f9SRichard Henderson 
test_dlgr(void)52*4e5712f9SRichard Henderson static void test_dlgr(void)
53*4e5712f9SRichard Henderson {
54*4e5712f9SRichard Henderson     register uint64_t r0 asm("r0") = 0;
55*4e5712f9SRichard Henderson     register uint64_t r1 asm("r1") = 4243;
56*4e5712f9SRichard Henderson     uint64_t b = 101, q, r;
57*4e5712f9SRichard Henderson 
58*4e5712f9SRichard Henderson     asm("dlgr %[r0],%[b]"
59*4e5712f9SRichard Henderson         : [r0] "+r" (r0), [r1] "+r" (r1)
60*4e5712f9SRichard Henderson         : [b] "r" (b)
61*4e5712f9SRichard Henderson         : "cc");
62*4e5712f9SRichard Henderson     q = r1;
63*4e5712f9SRichard Henderson     r = r0;
64*4e5712f9SRichard Henderson     assert(q == 42);
65*4e5712f9SRichard Henderson     assert(r == 1);
66*4e5712f9SRichard Henderson }
67*4e5712f9SRichard Henderson 
main(void)6829b8de00SIlya Leoshkevich int main(void)
6929b8de00SIlya Leoshkevich {
7029b8de00SIlya Leoshkevich     test_dr();
7129b8de00SIlya Leoshkevich     test_dlr();
72*4e5712f9SRichard Henderson     test_dsgr();
73*4e5712f9SRichard Henderson     test_dlgr();
74*4e5712f9SRichard Henderson     return 0;
7529b8de00SIlya Leoshkevich }
76