1*24964Szliu; @(#)national.s 1.1 (ucb.elefunt) 09/19/85 2*24964Szliu; 3*24964Szliu; subroutines 4*24964Szliu; add_ulp(x) ... return x+ulp 5*24964Szliu; sub_ulp(x) ... return x-ulp 6*24964Szliu; swapENI(i) ... swap inexact enable bit with i 7*24964Szliu; swapINX(i) ... swap inexact flag bit with i 8*24964Szliu; swapRM(i) ... swap rounding mode with i 9*24964Szliu; 10*24964Szliu 11*24964Szliu; add_ulp(x): 12*24964Szliu; add one ulp to a floating point number 13*24964Szliu .align 2 14*24964Szliu .globl _add_ulp 15*24964Szliu_add_ulp: 16*24964Szliu movd 4(sp),r0 17*24964Szliu movd 8(sp),r1 18*24964Szliu addd 1,r0 19*24964Szliu addcd 0,r1 20*24964Szliu movd r0,4(sp) 21*24964Szliu movd r1,8(sp) 22*24964Szliu movl 4(sp),f0 23*24964Szliu ret 0 24*24964Szliu 25*24964Szliu; sub_ulp(x) 26*24964Szliu; subtract one ulp from a floating point number 27*24964Szliu .align 2 28*24964Szliu .globl _sub_ulp 29*24964Szliu_sub_ulp: 30*24964Szliu movd 4(sp),r0 31*24964Szliu movd 8(sp),r1 32*24964Szliu subd 1,r0 33*24964Szliu subcd 0,r1 34*24964Szliu movd r0,4(sp) 35*24964Szliu movd r1,8(sp) 36*24964Szliu movl 4(sp),f0 37*24964Szliu ret 0 38*24964Szliu 39*24964Szliu; swapENI(i) 40*24964Szliu; swap the inexact enable bit 41*24964Szliu .text 42*24964Szliu .align 2 43*24964Szliu .globl _swapENI 44*24964Szliu_swapENI: 45*24964Szliu movd 4(sp),r1 46*24964Szliu sfsr r0 47*24964Szliu movd r0,r2 48*24964Szliu bicd [5],r2 49*24964Szliu andd [0],r1 50*24964Szliu ashd 5,r1 51*24964Szliu ord r1,r2 52*24964Szliu lfsr r2 53*24964Szliu ashd -5,r0 54*24964Szliu andd [0],r0 55*24964Szliu ret 0 56*24964Szliu 57*24964Szliu; swapINX(i) 58*24964Szliu; swap the inexact flag 59*24964Szliu .align 2 60*24964Szliu .globl _swapINX 61*24964Szliu_swapINX: 62*24964Szliu movd 4(sp),r1 63*24964Szliu sfsr r0 64*24964Szliu movd r0,r2 65*24964Szliu bicd [6],r2 66*24964Szliu andd [0],r1 67*24964Szliu ashd 6,r1 68*24964Szliu ord r1,r2 69*24964Szliu lfsr r2 70*24964Szliu ashd -6,r0 71*24964Szliu andd [0],r0 72*24964Szliu ret 0 73*24964Szliu 74*24964Szliu; swapRM(i) 75*24964Szliu; swap the rounding mode 76*24964Szliu .align 2 77*24964Szliu .globl _swapRM 78*24964Szliu_swapRM: 79*24964Szliu movd 4(sp),r1 80*24964Szliu sfsr r0 81*24964Szliu movd r0,r2 82*24964Szliu bicd [7,8],r2 83*24964Szliu andd [0,1],r1 84*24964Szliu ashd 7,r1 85*24964Szliu ord r1,r2 86*24964Szliu lfsr r2 87*24964Szliu ashd -7,r0 88*24964Szliu andd [0,1],r0 89*24964Szliu ret 0 90