1 @ VFP Instructions for D variants (Double precision) 2 @ Same as vfp1.s, but for Thumb-2 3 .syntax unified 4 .thumb 5 .text 6 .global F 7 F: 8 @ First we test the basic syntax and bit patterns of the opcodes. 9 @ Most of these tests deliberatly use d0/r0 to avoid setting 10 @ any more bits than necessary. 11 12 @ Comparison operations 13 14 fcmped d0, d0 15 fcmpezd d0 16 fcmpd d0, d0 17 fcmpzd d0 18 19 @ Monadic data operations 20 21 fabsd d0, d0 22 fcpyd d0, d0 23 fnegd d0, d0 24 fsqrtd d0, d0 25 26 @ Dyadic data operations 27 28 faddd d0, d0, d0 29 fdivd d0, d0, d0 30 fmacd d0, d0, d0 31 fmscd d0, d0, d0 32 fmuld d0, d0, d0 33 fnmacd d0, d0, d0 34 fnmscd d0, d0, d0 35 fnmuld d0, d0, d0 36 fsubd d0, d0, d0 37 38 @ Load/store operations 39 40 fldd d0, [r0] 41 fstd d0, [r0] 42 43 @ Load/store multiple operations 44 45 fldmiad r0, {d0} 46 fldmfdd r0, {d0} 47 fldmiad r0!, {d0} 48 fldmfdd r0!, {d0} 49 fldmdbd r0!, {d0} 50 fldmead r0!, {d0} 51 52 fstmiad r0, {d0} 53 fstmead r0, {d0} 54 fstmiad r0!, {d0} 55 fstmead r0!, {d0} 56 fstmdbd r0!, {d0} 57 fstmfdd r0!, {d0} 58 59 @ Conversion operations 60 61 fsitod d0, s0 62 fuitod d0, s0 63 64 ftosid s0, d0 65 ftosizd s0, d0 66 ftouid s0, d0 67 ftouizd s0, d0 68 69 fcvtds d0, s0 70 fcvtsd s0, d0 71 72 @ ARM from VFP operations 73 74 fmrdh r0, d0 75 fmrdl r0, d0 76 77 @ VFP From ARM operations 78 79 fmdhr d0, r0 80 fmdlr d0, r0 81 82 @ Now we test that the register fields are updated correctly for 83 @ each class of instruction. 84 85 @ Single register operations (compare-zero): 86 87 fcmpzd d1 88 fcmpzd d2 89 fcmpzd d15 90 91 @ Two register comparison operations: 92 93 fcmpd d0, d1 94 fcmpd d0, d2 95 fcmpd d0, d15 96 fcmpd d1, d0 97 fcmpd d2, d0 98 fcmpd d15, d0 99 fcmpd d5, d12 100 101 @ Two register data operations (monadic) 102 103 fnegd d0, d1 104 fnegd d0, d2 105 fnegd d0, d15 106 fnegd d1, d0 107 fnegd d2, d0 108 fnegd d15, d0 109 fnegd d12, d5 110 111 @ Three register data operations (dyadic) 112 113 faddd d0, d0, d1 114 faddd d0, d0, d2 115 faddd d0, d0, d15 116 faddd d0, d1, d0 117 faddd d0, d2, d0 118 faddd d0, d15, d0 119 faddd d1, d0, d0 120 faddd d2, d0, d0 121 faddd d15, d0, d0 122 faddd d12, d9, d5 123 124 @ Conversion operations 125 126 fcvtds d0, s1 127 fcvtds d0, s2 128 fcvtds d0, s31 129 fcvtds d1, s0 130 fcvtds d2, s0 131 fcvtds d15, s0 132 fcvtsd s1, d0 133 fcvtsd s2, d0 134 fcvtsd s31, d0 135 fcvtsd s0, d1 136 fcvtsd s0, d2 137 fcvtsd s0, d15 138 139 @ Move to VFP from ARM 140 141 fmrdh r1, d0 142 fmrdh r14, d0 143 fmrdh r0, d1 144 fmrdh r0, d2 145 fmrdh r0, d15 146 fmrdl r1, d0 147 fmrdl r14, d0 148 fmrdl r0, d1 149 fmrdl r0, d2 150 fmrdl r0, d15 151 152 @ Move to ARM from VFP 153 154 fmdhr d0, r1 155 fmdhr d0, r14 156 fmdhr d1, r0 157 fmdhr d2, r0 158 fmdhr d15, r0 159 fmdlr d0, r1 160 fmdlr d0, r14 161 fmdlr d1, r0 162 fmdlr d2, r0 163 fmdlr d15, r0 164 165 @ Load/store operations 166 167 fldd d0, [r1] 168 fldd d0, [r14] 169 fldd d0, [r0, #0] 170 fldd d0, [r0, #1020] 171 fldd d0, [r0, #-1020] 172 fldd d1, [r0] 173 fldd d2, [r0] 174 fldd d15, [r0] 175 fstd d12, [r12, #804] 176 177 @ Load/store multiple operations 178 179 fldmiad r0, {d1} 180 fldmiad r0, {d2} 181 fldmiad r0, {d15} 182 fldmiad r0, {d0-d1} 183 fldmiad r0, {d0-d2} 184 fldmiad r0, {d0-d15} 185 fldmiad r0, {d1-d15} 186 fldmiad r0, {d2-d15} 187 fldmiad r0, {d14-d15} 188 fldmiad r1, {d0} 189 fldmiad r14, {d0} 190 191 @ Check that we assemble all the register names correctly 192 193 fcmpzd d0 194 fcmpzd d1 195 fcmpzd d2 196 fcmpzd d3 197 fcmpzd d4 198 fcmpzd d5 199 fcmpzd d6 200 fcmpzd d7 201 fcmpzd d8 202 fcmpzd d9 203 fcmpzd d10 204 fcmpzd d11 205 fcmpzd d12 206 fcmpzd d13 207 fcmpzd d14 208 fcmpzd d15 209 210 @ Now we check the placement of the conditional execution substring. 211 @ On VFP this is always at the end of the instruction. 212 213 @ Comparison operations 214 215 itttt eq 216 fcmpedeq d1, d15 217 fcmpezdeq d2 218 fcmpdeq d3, d14 219 fcmpzdeq d4 220 221 @ Monadic data operations 222 223 itttt eq 224 fabsdeq d5, d13 225 fcpydeq d6, d12 226 fnegdeq d7, d11 227 fsqrtdeq d8, d10 228 229 @ Dyadic data operations 230 231 itttt eq 232 fadddeq d9, d1, d15 233 fdivdeq d2, d3, d14 234 fmacdeq d4, d13, d12 235 fmscdeq d5, d6, d11 236 itttt eq 237 fmuldeq d7, d10, d9 238 fnmacdeq d8, d9, d10 239 fnmscdeq d7, d6, d11 240 fnmuldeq d5, d4, d12 241 ittt eq 242 fsubdeq d3, d13, d14 243 244 @ Load/store operations 245 246 flddeq d2, [r5] 247 fstdeq d1, [r12] 248 249 @ Load/store multiple operations 250 251 itttt eq 252 fldmiadeq r1, {d1} 253 fldmfddeq r2, {d2} 254 fldmiadeq r3!, {d3} 255 fldmfddeq r4!, {d4} 256 itttt eq 257 fldmdbdeq r5!, {d5} 258 fldmeadeq r6!, {d6} 259 260 fstmiadeq r7, {d15} 261 fstmeadeq r8, {d14} 262 itttt eq 263 fstmiadeq r9!, {d13} 264 fstmeadeq r10!, {d12} 265 fstmdbdeq r11!, {d11} 266 fstmfddeq r12!, {d10} 267 268 @ Conversion operations 269 270 itttt eq 271 fsitodeq d15, s1 272 fuitodeq d1, s31 273 274 ftosideq s1, d15 275 ftosizdeq s31, d2 276 itttt eq 277 ftouideq s15, d2 278 ftouizdeq s11, d3 279 280 fcvtdseq d1, s10 281 fcvtsdeq s11, d1 282 283 @ ARM from VFP operations 284 285 itttt eq 286 fmrdheq r8, d1 287 fmrdleq r7, d15 288 289 @ VFP From ARM operations 290 291 fmdhreq d1, r15 292 fmdlreq d15, r1 293 294 # Add three nop instructions to ensure that the 295 # output is 32-byte aligned as required for arm-aout. 296 nop 297 nop 298 nop 299