1*372886d2SIlya Leoshkevich /* 2*372886d2SIlya Leoshkevich * Test the CLGEBR instruction. 3*372886d2SIlya Leoshkevich * 4*372886d2SIlya Leoshkevich * SPDX-License-Identifier: GPL-2.0-or-later 5*372886d2SIlya Leoshkevich */ 6*372886d2SIlya Leoshkevich #include <assert.h> 7*372886d2SIlya Leoshkevich #include <fenv.h> 8*372886d2SIlya Leoshkevich #include <stdlib.h> 9*372886d2SIlya Leoshkevich main(void)10*372886d2SIlya Leoshkevichint main(void) 11*372886d2SIlya Leoshkevich { 12*372886d2SIlya Leoshkevich float r2 = -1; 13*372886d2SIlya Leoshkevich long long r1; 14*372886d2SIlya Leoshkevich int cc; 15*372886d2SIlya Leoshkevich 16*372886d2SIlya Leoshkevich feclearexcept(FE_ALL_EXCEPT); 17*372886d2SIlya Leoshkevich asm("clgebr %[r1],%[m3],%[r2],%[m4]\n" 18*372886d2SIlya Leoshkevich "ipm %[cc]\n" 19*372886d2SIlya Leoshkevich : [r1] "=r" (r1) 20*372886d2SIlya Leoshkevich , [cc] "=r" (cc) 21*372886d2SIlya Leoshkevich : [m3] "i" (5) /* round toward 0 */ 22*372886d2SIlya Leoshkevich , [r2] "f" (r2) 23*372886d2SIlya Leoshkevich , [m4] "i" (8) /* bit 0 is set, but must be ignored; XxC is not set */ 24*372886d2SIlya Leoshkevich : "cc"); 25*372886d2SIlya Leoshkevich cc >>= 28; 26*372886d2SIlya Leoshkevich 27*372886d2SIlya Leoshkevich assert(r1 == 0); 28*372886d2SIlya Leoshkevich assert(cc == 3); 29*372886d2SIlya Leoshkevich assert(fetestexcept(FE_ALL_EXCEPT) == (FE_INVALID | FE_INEXACT)); 30*372886d2SIlya Leoshkevich 31*372886d2SIlya Leoshkevich return EXIT_SUCCESS; 32*372886d2SIlya Leoshkevich } 33