1/* 2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7// Canned instruction sequences for use with the DCP 8 9.macro dcp_fadd_m rz,rx,ry 10 WXYU \rx,\ry 11 ADD0 12 ADD1 13 NRDF 14 RDFA \rz 15.endm 16 17.macro dcp_fsub_m rz,rx,ry 18 WXYU \rx,\ry 19 ADD0 20 SUB1 21 NRDF 22 RDFS \rz 23.endm 24 25.macro dcp_fmul_m rz,rx,ry,ra,rb 26 WXYU \rx,\ry 27 RXYH \ra,\rb 28 umull \ra,\rb,\ra,\rb 29 WXFM \ra,\rb 30 NRDF 31 RDFM \rz 32.endm 33 34.macro dcp_fxprod_m rzl,rzh,rx,ry,ra,rb 35 WXYU \rx,\ry 36 RXYH \ra,\rb 37 umull \ra,\rb,\ra,\rb 38 WXMO \ra,\rb 39 NRDD 40 RDDM \rzl,\rzh 41.endm 42 43.macro dcp_fdiv_fast_m rz,rx,ry,ra,rb,rc 44 WXYU \rx,\ry 45 RYMR \ra,\rb 46 umull \rb,\rc,\ra,\rb 47 mvn \rc,\rc,lsl #2 48 smmlar \ra,\rc,\ra,\ra 49 smmulr \rc,\rc,\rc 50 smmlar \ra,\rc,\ra,\ra 51 RXYH \rb,\rc 52 umull \ra,\rb,\ra,\rb 53 WXFD \rb,\rb 54 NRDF 55 RDFD \rz 56.endm 57 58.macro dcp_fdiv_m rz,rx,ry,ra,rb,rc,rd 59 WXYU \rx,\ry 60 RYMR \ra,\rb 61 umull \rb,\rc,\ra,\rb 62 mvn \rc,\rc,lsl #2 63 smmlar \ra,\rc,\ra,\ra 64 smmulr \rc,\rc,\rc 65 smmlar \ra,\rc,\ra,\ra 66 RXYH \rb,\rc 67 umull \rd,\ra,\ra,\rb 68 orr \ra,\ra,\ra,lsr #24 69 bic \ra,\ra,\ra,lsr #25 70 bic \ra,\ra,#15 71 mov \rc,\rc,lsr #7 72 mul \rd,\ra,\rc 73 rsb \rd,\rd,\rb,lsl #22 74 sub \ra,\ra,\rd,lsr #31 75 WXFD \ra,\ra 76 NRDF 77 RDFD \rz 78.endm 79 80.macro dcp_fsqrt_fast_m rz,rx,ra,rb,rc,rd 81 WXYU \rx,\rx 82 SQR0 83 RXMQ \rc,\rd 84 umull \ra,\rb,\rc,\rc 85 umull \ra,\rb,\rb,\rd 86 mov \rb,\rb,lsl #3 87 sub \rb,\rb,#2147483648 88 smmlsr \rc,\rc,\rb,\rc 89 umull \ra,\rb,\rc,\rc 90 umull \ra,\rb,\rb,\rd 91 movs \ra,\ra,lsr #28 92 adc \rb,\ra,\rb,lsl #4 93 smmulr \ra,\rb,\rc 94 sub \rc,\rc,\ra,asr #1 95 umull \ra,\rb,\rc,\rd 96 WXFQ \ra,\rb 97 NRDF 98 RDFQ \rz 99.endm 100 101.macro dcp_fsqrt_m rz,rx,ra,rb,rc,rd 102 WXYU \rx,\rx 103 SQR0 104 RXMQ \rc,\rd 105 umull \ra,\rb,\rc,\rc 106 umull \ra,\rb,\rb,\rd 107 mov \rb,\rb,lsl #3 108 sub \rb,\rb,#2147483648 109 smmlsr \rc,\rc,\rb,\rc 110 umull \ra,\rb,\rc,\rc 111 umull \ra,\rb,\rb,\rd 112 movs \ra,\ra,lsr #28 113 adc \rb,\ra,\rb,lsl #4 114 smmulr \ra,\rb,\rc 115 sub \rc,\rc,\ra,asr #1 116 umull \ra,\rb,\rc,\rd 117 orr \rb,\rb,#63 118 mov \ra,\rb,lsr #5 119 mul \ra,\ra,\ra 120 rsb \ra,\ra,\rd,lsl #18 121 bic \rb,\rb,\ra,lsr #26 122 WXFQ \ra,\rb 123 NRDF 124 RDFQ \rz 125.endm 126 127.macro dcp_fclassify_m rz,rx 128 WXYU \rx,\rx 129 RXVD \rz 130.endm 131 132.macro dcp_fcmp_m rz,rx,ry 133 WXYU \rx,\ry 134 ADD0 135 RCMP \rz 136.endm 137 138.macro dcp_dadd_m rzl,rzh,rxl,rxh,ryl,ryh 139 WXUP \rxl,\rxh 140 WYUP \ryl,\ryh 141 ADD0 142 ADD1 143 NRDD 144 RDDA \rzl,\rzh 145.endm 146 147.macro dcp_dsub_m rzl,rzh,rxl,rxh,ryl,ryh 148 WXUP \rxl,\rxh 149 WYUP \ryl,\ryh 150 ADD0 151 SUB1 152 NRDD 153 RDDS \rzl,\rzh 154.endm 155 156.macro dcp_dmul_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re,rf,rg 157 WXUP \rxl,\rxh 158 WYUP \ryl,\ryh 159 RXMS \ra,\rb,0 160 RYMS \rc,\rd,0 161 umull \re,\rf,\ra,\rc 162 movs \rg,#0 163 umlal \rf,\rg,\ra,\rd 164 umlal \rf,\rg,\rb,\rc 165 WXMS \re,\rf 166 movs \re,#0 167 umlal \rg,\re,\rb,\rd 168 WXMO \rg,\re 169 NRDD 170 RDDM \rzl,\rzh 171.endm 172 173.macro dcp_ddiv_fast_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re 174 WXUP \rxl,\rxh 175 WYUP \ryl,\ryh 176 RYMR \ra,\rb 177 umull \rb,\rc,\ra,\rb 178 mvn \rc,\rc,lsl #2 179 smmlar \ra,\rc,\ra,\ra 180 smmulr \rc,\rc,\rc 181 smmlar \ra,\rc,\ra,\ra 182 sub \re,\ra,\ra,lsr #31 183 RXMS \rc,\rd,0 184 smmulr \rb,\re,\rd 185 RYMS \rc,\rd,1 186 umull \rc,\ra,\rb,\rc 187 mla \ra,\rb,\rd,\ra 188 RXMS \rc,\rd,4 189 sub \ra,\rc,\ra 190 smmulr \rc,\ra,\re 191 mov \rd,\rb,lsr #4 192 adds \ra,\rc,\rb,lsl #28 193 adc \rb,\rd,\rc,asr #31 194 WXDD \ra,\rb 195 NRDD 196 RDDD \rzl,\rzh 197.endm 198 199.macro dcp_ddiv_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re 200 WXUP \rxl,\rxh 201 WYUP \ryl,\ryh 202 RYMR \ra,\rb 203 umull \rb,\rc,\ra,\rb 204 mvn \rc,\rc,lsl #2 205 smmlar \ra,\rc,\ra,\ra 206 smmulr \rc,\rc,\rc 207 smmlar \ra,\rc,\ra,\ra 208 sub \re,\ra,\ra,lsr #31 209 RXMS \rc,\rd,0 210 smmulr \rb,\re,\rd 211 RYMS \rc,\rd,1 212 umull \rc,\ra,\rb,\rc 213 mla \ra,\rb,\rd,\ra 214 RXMS \rc,\rd,4 215 sub \ra,\rc,\ra 216 smmulr \rc,\ra,\re 217 mov \rd,\rb,lsr #4 218 adds \ra,\rc,\rb,lsl #28 219 adc \rb,\rd,\rc,asr #31 220 orr \ra,\ra,\rb,lsr #21 221 bic \ra,\ra,\rb,lsr #22 222 bic \ra,\ra,#7 223 RYMS \rc,\rd,7 224 umull \rd,\re,\ra,\rc 225 RYMS \rc,\rd,7 226 mla \re,\ra,\rd,\re 227 mla \re,\rb,\rc,\re 228 RXMS \rc,\rd,0 229 sub \re,\re,\rc,lsl #18 230 orr \ra,\ra,\re,lsr #29 231 sub \ra,\ra,#1 232 WXDD \ra,\rb 233 NRDD 234 RDDD \rzl,\rzh 235.endm 236 237.macro dcp_dsqrt_fast_m rzl,rzh,rxl,rxh,ra,rb,rc,rd,re 238 WXUP \rxl,\rxh 239 SQR0 240 RXMQ \rc,\rd 241 umull \ra,\rb,\rc,\rc 242 umull \ra,\rb,\rb,\rd 243 mov \rb,\rb,lsl #3 244 sub \rb,\rb,#2147483648 245 smmlsr \rc,\rc,\rb,\rc 246 umull \ra,\rb,\rc,\rc 247 umull \ra,\rb,\rb,\rd 248 movs \ra,\ra,lsr #28 249 adc \rb,\ra,\rb,lsl #4 250 smmulr \ra,\rb,\rc 251 sub \rc,\rc,\ra,asr #1 252 umull \ra,\rb,\rc,\rd 253 mov \rb,\rb,lsr #1 254 umull \rd,\ra,\rb,\rb 255 RXMS \ra,\re,6 256 sub \ra,\ra,\rd 257 smmulr \ra,\ra,\rc 258 add \rb,\rb,\ra,asr #28 259 mov \ra,\ra,lsl #4 260 WXDQ \ra,\rb 261 NRDD 262 RDDQ \rzl,\rzh 263.endm 264 265.macro dcp_dsqrt_m rzl,rzh,rxl,rxh,ra,rb,rc,rd,re 266 WXUP \rxl,\rxh 267 SQR0 268 RXMQ \rc,\rd 269 umull \ra,\rb,\rc,\rc 270 umull \ra,\rb,\rb,\rd 271 mov \rb,\rb,lsl #3 272 sub \rb,\rb,#2147483648 273 smmlsr \rc,\rc,\rb,\rc 274 umull \ra,\rb,\rc,\rc 275 umull \ra,\rb,\rb,\rd 276 movs \ra,\ra,lsr #28 277 adc \rb,\ra,\rb,lsl #4 278 smmulr \ra,\rb,\rc 279 sub \rc,\rc,\ra,asr #1 280 umull \ra,\rb,\rc,\rd 281 mov \rb,\rb,lsr #1 282 umull \rd,\ra,\rb,\rb 283 RXMS \ra,\re,6 284 sub \rd,\ra,\rd 285 smmulr \rd,\rd,\rc 286 add \rb,\rb,\rd,asr #28 287 mov \rd,\rd,lsl #4 288 bic \rd,\rd,#255 289 orr \rd,\rd,#128 290 umull \re,\rc,\rd,\rd 291 mul \re,\rb,\rb 292 umlal \rc,\re,\rb,\rd 293 umlal \rc,\re,\rb,\rd 294 sub \re,\re,\ra 295 orr \rd,\rd,\re,lsr #24 296 sub \rd,\rd,#11 297 WXDQ \rd,\rb 298 NRDD 299 RDDQ \rzl,\rzh 300.endm 301 302.macro dcp_dclassify_m rz,rxl,rxh 303 WXUP \rxl,\rxh 304 RXVD \rz 305.endm 306 307.macro dcp_dcmp_m rz,rxl,rxh,ryl,ryh 308 WXUP \rxl,\rxh 309 WYUP \ryl,\ryh 310 ADD0 311 RCMP \rz 312.endm 313 314.macro dcp_float2double_m rzl,rzh,rx 315 WXYU \rx,\rx 316 NRDD 317 RDDG \rzl,\rzh 318.endm 319 320.macro dcp_double2float_m rz,rxl,rxh 321 WXUP \rxl,\rxh 322 NRDF 323 RDFG \rz 324.endm 325 326.macro dcp_int2double_m rzl,rzh,rx 327 WXIC \rx,\rx 328 ADD0 329 SUB1 330 NRDD 331 RDDS \rzl,\rzh 332.endm 333 334.macro dcp_uint2double_m rzl,rzh,rx 335 WXUC \rx,\rx 336 ADD0 337 SUB1 338 NRDD 339 RDDS \rzl,\rzh 340.endm 341 342.macro dcp_int2float_m rz,rx 343 WXIC \rx,\rx 344 ADD0 345 SUB1 346 NRDF 347 RDFS \rz 348.endm 349 350.macro dcp_uint2float_m rz,rx 351 WXUC \rx,\rx 352 ADD0 353 SUB1 354 NRDF 355 RDFS \rz 356.endm 357 358.macro dcp_double2int_m rz,rxl,rxh 359 WXDC \rxl,\rxh 360 ADD0 361 ADD1 362 NTDC 363 RDIC \rz 364.endm 365 366.macro dcp_double2uint_m rz,rxl,rxh 367 WXDC \rxl,\rxh 368 ADD0 369 ADD1 370 NTDC 371 RDUC \rz 372.endm 373 374.macro dcp_float2int_m rz,rx 375 WXFC \rx,\rx 376 ADD0 377 ADD1 378 NTDC 379 RDIC \rz 380.endm 381 382.macro dcp_float2uint_m rz,rx 383 WXFC \rx,\rx 384 ADD0 385 ADD1 386 NTDC 387 RDUC \rz 388.endm 389 390.macro dcp_double2int_r_m rz,rxl,rxh 391 WXDC \rxl,\rxh 392 ADD0 393 ADD1 394 NRDC 395 RDIC \rz 396.endm 397 398.macro dcp_double2uint_r_m rz,rxl,rxh 399 WXDC \rxl,\rxh 400 ADD0 401 ADD1 402 NRDC 403 RDUC \rz 404.endm 405 406.macro dcp_float2int_r_m rz,rx 407 WXFC \rx,\rx 408 ADD0 409 ADD1 410 NRDC 411 RDIC \rz 412.endm 413 414.macro dcp_float2uint_r_m rz,rx 415 WXFC \rx,\rx 416 ADD0 417 ADD1 418 NRDC 419 RDUC \rz 420.endm 421