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