1# frv testcase for smulcc $GRi,$GRj,$GRk 2# mach: all 3 4 .include "testutils.inc" 5 6 start 7 8 .global smulcc 9smulcc: 10 ; Positive operands 11 set_gr_immed 3,gr7 ; multiply small numbers 12 set_gr_immed 2,gr8 13 set_icc 0x0,0 14 smulcc gr7,gr8,gr8,icc0 15 test_icc 0 0 0 0 icc0 16 test_gr_immed 0,gr8 17 test_gr_immed 6,gr9 18 19 set_gr_immed 1,gr7 ; multiply by 1 20 set_gr_immed 2,gr8 21 set_icc 0x1,0 22 smulcc gr7,gr8,gr8,icc0 23 test_icc 0 0 0 1 icc0 24 test_gr_immed 0,gr8 25 test_gr_immed 2,gr9 26 27 set_gr_immed 2,gr7 ; multiply by 1 28 set_gr_immed 1,gr8 29 set_icc 0x2,0 30 smulcc gr7,gr8,gr8,icc0 31 test_icc 0 0 1 0 icc0 32 test_gr_immed 0,gr8 33 test_gr_immed 2,gr9 34 35 set_gr_immed 0,gr7 ; multiply by 0 36 set_gr_immed 2,gr8 37 set_icc 0xb,0 38 smulcc gr7,gr8,gr8,icc0 39 test_icc 0 1 1 1 icc0 40 test_gr_immed 0,gr8 41 test_gr_immed 0,gr9 42 43 set_gr_immed 2,gr7 ; multiply by 0 44 set_gr_immed 0,gr8 45 set_icc 0x8,0 46 smulcc gr7,gr8,gr8,icc0 47 test_icc 0 1 0 0 icc0 48 test_gr_immed 0,gr8 49 test_gr_immed 0,gr9 50 51 set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result 52 set_gr_immed 2,gr8 53 set_icc 0xd,0 54 smulcc gr7,gr8,gr8,icc0 55 test_icc 0 0 0 1 icc0 56 test_gr_immed 0,gr8 57 test_gr_limmed 0x7fff,0xfffe,gr9 58 59 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 60 set_gr_immed 2,gr8 61 set_icc 0xe,0 62 smulcc gr7,gr8,gr8,icc0 63 test_icc 0 0 1 0 icc0 64 test_gr_immed 0,gr8 65 test_gr_limmed 0x8000,0x0000,gr9 66 67 set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result 68 set_gr_immed 4,gr8 69 set_icc 0xf,0 70 smulcc gr7,gr8,gr8,icc0 71 test_icc 0 0 1 1 icc0 72 test_gr_immed 1,gr8 73 test_gr_limmed 0x0000,0x0000,gr9 74 75 set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result 76 set_gr_limmed 0x7fff,0xffff,gr8 77 set_icc 0xc,0 78 smulcc gr7,gr8,gr8,icc0 79 test_icc 0 0 0 0 icc0 80 test_gr_limmed 0x3fff,0xffff,gr8 81 test_gr_immed 0x00000001,gr9 82 83 ; Mixed operands 84 set_gr_immed -3,gr7 ; multiply small numbers 85 set_gr_immed 2,gr8 86 set_icc 0x5,0 87 smulcc gr7,gr8,gr8,icc0 88 test_icc 1 0 0 1 icc0 89 test_gr_immed -1,gr8 90 test_gr_immed -6,gr9 91 92 set_gr_immed 3,gr7 ; multiply small numbers 93 set_gr_immed -2,gr8 94 set_icc 0x6,0 95 smulcc gr7,gr8,gr8,icc0 96 test_icc 1 0 1 0 icc0 97 test_gr_immed -1,gr8 98 test_gr_immed -6,gr9 99 100 set_gr_immed 1,gr7 ; multiply by 1 101 set_gr_immed -2,gr8 102 set_icc 0x7,0 103 smulcc gr7,gr8,gr8,icc0 104 test_icc 1 0 1 1 icc0 105 test_gr_immed -1,gr8 106 test_gr_immed -2,gr9 107 108 set_gr_immed -2,gr7 ; multiply by 1 109 set_gr_immed 1,gr8 110 set_icc 0x4,0 111 smulcc gr7,gr8,gr8,icc0 112 test_icc 1 0 0 0 icc0 113 test_gr_immed -1,gr8 114 test_gr_immed -2,gr9 115 116 set_gr_immed 0,gr7 ; multiply by 0 117 set_gr_immed -2,gr8 118 set_icc 0x9,0 119 smulcc gr7,gr8,gr8,icc0 120 test_icc 0 1 0 1 icc0 121 test_gr_immed 0,gr8 122 test_gr_immed 0,gr9 123 124 set_gr_immed -2,gr7 ; multiply by 0 125 set_gr_immed 0,gr8 126 set_icc 0xa,0 127 smulcc gr7,gr8,gr8,icc0 128 test_icc 0 1 1 0 icc0 129 test_gr_immed 0,gr8 130 test_gr_immed 0,gr9 131 132 set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result 133 set_gr_immed -2,gr8 134 set_icc 0x7,0 135 smulcc gr7,gr8,gr8,icc0 136 test_icc 1 0 1 1 icc0 137 test_gr_limmed 0xffff,0xffff,gr8 138 test_gr_limmed 0xbfff,0xfffe,gr9 139 140 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 141 set_gr_immed -2,gr8 142 set_icc 0x4,0 143 smulcc gr7,gr8,gr8,icc0 144 test_icc 1 0 0 0 icc0 145 test_gr_limmed 0xffff,0xffff,gr8 146 test_gr_limmed 0x8000,0x0000,gr9 147 148 set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result 149 set_gr_immed -2,gr8 150 set_icc 0x5,0 151 smulcc gr7,gr8,gr8,icc0 152 test_icc 1 0 0 1 icc0 153 test_gr_limmed 0xffff,0xffff,gr8 154 test_gr_limmed 0x7fff,0xfffe,gr9 155 156 set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result 157 set_gr_immed -4,gr8 158 set_icc 0x6,0 159 smulcc gr7,gr8,gr8,icc0 160 test_icc 1 0 1 0 icc0 161 test_gr_limmed 0xffff,0xffff,gr8 162 test_gr_limmed 0x0000,0x0000,gr9 163 164 set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result 165 set_gr_limmed 0x8000,0x0000,gr8 166 set_icc 0x7,0 167 smulcc gr7,gr8,gr8,icc0 168 test_icc 1 0 1 1 icc0 169 test_gr_limmed 0xc000,0x0000,gr8 170 test_gr_limmed 0x8000,0x0000,gr9 171 172 ; Negative operands 173 set_gr_immed -3,gr7 ; multiply small numbers 174 set_gr_immed -2,gr8 175 set_icc 0xc,0 176 smulcc gr7,gr8,gr8,icc0 177 test_icc 0 0 0 0 icc0 178 test_gr_immed 0,gr8 179 test_gr_immed 6,gr9 180 181 set_gr_immed -1,gr7 ; multiply by 1 182 set_gr_immed -2,gr8 183 set_icc 0xd,0 184 smulcc gr7,gr8,gr8,icc0 185 test_icc 0 0 0 1 icc0 186 test_gr_immed 0,gr8 187 test_gr_immed 2,gr9 188 189 set_gr_immed -2,gr7 ; multiply by 1 190 set_gr_immed -1,gr8 191 set_icc 0xe,0 192 smulcc gr7,gr8,gr8,icc0 193 test_icc 0 0 1 0 icc0 194 test_gr_immed 0,gr8 195 test_gr_immed 2,gr9 196 197 set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result 198 set_gr_immed -2,gr8 199 set_icc 0xf,0 200 smulcc gr7,gr8,gr8,icc0 201 test_icc 0 0 1 1 icc0 202 test_gr_immed 0,gr8 203 test_gr_limmed 0x7fff,0xfffe,gr9 204 205 set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result 206 set_gr_immed -2,gr8 207 set_icc 0xc,0 208 smulcc gr7,gr8,gr8,icc0 209 test_icc 0 0 0 0 icc0 210 test_gr_immed 0,gr8 211 test_gr_limmed 0x8000,0x0000,gr9 212 213 set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result 214 set_gr_immed -4,gr8 215 set_icc 0xd,0 216 smulcc gr7,gr8,gr8,icc0 217 test_icc 0 0 0 1 icc0 218 test_gr_immed 1,gr8 219 test_gr_immed 0x00000000,gr9 220 221 set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result 222 set_gr_limmed 0x8000,0x0001,gr8 223 set_icc 0xe,0 224 smulcc gr7,gr8,gr8,icc0 225 test_icc 0 0 1 0 icc0 226 test_gr_limmed 0x3fff,0xffff,gr8 227 test_gr_immed 0x00000001,gr9 228 229 230 set_gr_limmed 0x8000,0x0000,gr7 ; max positive result 231 set_gr_limmed 0x8000,0x0000,gr8 232 set_icc 0xf,0 233 smulcc gr7,gr8,gr8,icc0 234 test_icc 0 0 1 1 icc0 235 test_gr_limmed 0x4000,0x0000,gr8 236 test_gr_immed 0x00000000,gr9 237 238 pass 239