/* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ // Canned instruction sequences for use with the DCP .macro dcp_fadd_m rz,rx,ry WXYU \rx,\ry ADD0 ADD1 NRDF RDFA \rz .endm .macro dcp_fsub_m rz,rx,ry WXYU \rx,\ry ADD0 SUB1 NRDF RDFS \rz .endm .macro dcp_fmul_m rz,rx,ry,ra,rb WXYU \rx,\ry RXYH \ra,\rb umull \ra,\rb,\ra,\rb WXFM \ra,\rb NRDF RDFM \rz .endm .macro dcp_fxprod_m rzl,rzh,rx,ry,ra,rb WXYU \rx,\ry RXYH \ra,\rb umull \ra,\rb,\ra,\rb WXMO \ra,\rb NRDD RDDM \rzl,\rzh .endm .macro dcp_fdiv_fast_m rz,rx,ry,ra,rb,rc WXYU \rx,\ry RYMR \ra,\rb umull \rb,\rc,\ra,\rb mvn \rc,\rc,lsl #2 smmlar \ra,\rc,\ra,\ra smmulr \rc,\rc,\rc smmlar \ra,\rc,\ra,\ra RXYH \rb,\rc umull \ra,\rb,\ra,\rb WXFD \rb,\rb NRDF RDFD \rz .endm .macro dcp_fdiv_m rz,rx,ry,ra,rb,rc,rd WXYU \rx,\ry RYMR \ra,\rb umull \rb,\rc,\ra,\rb mvn \rc,\rc,lsl #2 smmlar \ra,\rc,\ra,\ra smmulr \rc,\rc,\rc smmlar \ra,\rc,\ra,\ra RXYH \rb,\rc umull \rd,\ra,\ra,\rb orr \ra,\ra,\ra,lsr #24 bic \ra,\ra,\ra,lsr #25 bic \ra,\ra,#15 mov \rc,\rc,lsr #7 mul \rd,\ra,\rc rsb \rd,\rd,\rb,lsl #22 sub \ra,\ra,\rd,lsr #31 WXFD \ra,\ra NRDF RDFD \rz .endm .macro dcp_fsqrt_fast_m rz,rx,ra,rb,rc,rd WXYU \rx,\rx SQR0 RXMQ \rc,\rd umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd mov \rb,\rb,lsl #3 sub \rb,\rb,#2147483648 smmlsr \rc,\rc,\rb,\rc umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd movs \ra,\ra,lsr #28 adc \rb,\ra,\rb,lsl #4 smmulr \ra,\rb,\rc sub \rc,\rc,\ra,asr #1 umull \ra,\rb,\rc,\rd WXFQ \ra,\rb NRDF RDFQ \rz .endm .macro dcp_fsqrt_m rz,rx,ra,rb,rc,rd WXYU \rx,\rx SQR0 RXMQ \rc,\rd umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd mov \rb,\rb,lsl #3 sub \rb,\rb,#2147483648 smmlsr \rc,\rc,\rb,\rc umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd movs \ra,\ra,lsr #28 adc \rb,\ra,\rb,lsl #4 smmulr \ra,\rb,\rc sub \rc,\rc,\ra,asr #1 umull \ra,\rb,\rc,\rd orr \rb,\rb,#63 mov \ra,\rb,lsr #5 mul \ra,\ra,\ra rsb \ra,\ra,\rd,lsl #18 bic \rb,\rb,\ra,lsr #26 WXFQ \ra,\rb NRDF RDFQ \rz .endm .macro dcp_fclassify_m rz,rx WXYU \rx,\rx RXVD \rz .endm .macro dcp_fcmp_m rz,rx,ry WXYU \rx,\ry ADD0 RCMP \rz .endm .macro dcp_dadd_m rzl,rzh,rxl,rxh,ryl,ryh WXUP \rxl,\rxh WYUP \ryl,\ryh ADD0 ADD1 NRDD RDDA \rzl,\rzh .endm .macro dcp_dsub_m rzl,rzh,rxl,rxh,ryl,ryh WXUP \rxl,\rxh WYUP \ryl,\ryh ADD0 SUB1 NRDD RDDS \rzl,\rzh .endm .macro dcp_dmul_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re,rf,rg WXUP \rxl,\rxh WYUP \ryl,\ryh RXMS \ra,\rb,0 RYMS \rc,\rd,0 umull \re,\rf,\ra,\rc movs \rg,#0 umlal \rf,\rg,\ra,\rd umlal \rf,\rg,\rb,\rc WXMS \re,\rf movs \re,#0 umlal \rg,\re,\rb,\rd WXMO \rg,\re NRDD RDDM \rzl,\rzh .endm .macro dcp_ddiv_fast_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re WXUP \rxl,\rxh WYUP \ryl,\ryh RYMR \ra,\rb umull \rb,\rc,\ra,\rb mvn \rc,\rc,lsl #2 smmlar \ra,\rc,\ra,\ra smmulr \rc,\rc,\rc smmlar \ra,\rc,\ra,\ra sub \re,\ra,\ra,lsr #31 RXMS \rc,\rd,0 smmulr \rb,\re,\rd RYMS \rc,\rd,1 umull \rc,\ra,\rb,\rc mla \ra,\rb,\rd,\ra RXMS \rc,\rd,4 sub \ra,\rc,\ra smmulr \rc,\ra,\re mov \rd,\rb,lsr #4 adds \ra,\rc,\rb,lsl #28 adc \rb,\rd,\rc,asr #31 WXDD \ra,\rb NRDD RDDD \rzl,\rzh .endm .macro dcp_ddiv_m rzl,rzh,rxl,rxh,ryl,ryh,ra,rb,rc,rd,re WXUP \rxl,\rxh WYUP \ryl,\ryh RYMR \ra,\rb umull \rb,\rc,\ra,\rb mvn \rc,\rc,lsl #2 smmlar \ra,\rc,\ra,\ra smmulr \rc,\rc,\rc smmlar \ra,\rc,\ra,\ra sub \re,\ra,\ra,lsr #31 RXMS \rc,\rd,0 smmulr \rb,\re,\rd RYMS \rc,\rd,1 umull \rc,\ra,\rb,\rc mla \ra,\rb,\rd,\ra RXMS \rc,\rd,4 sub \ra,\rc,\ra smmulr \rc,\ra,\re mov \rd,\rb,lsr #4 adds \ra,\rc,\rb,lsl #28 adc \rb,\rd,\rc,asr #31 orr \ra,\ra,\rb,lsr #21 bic \ra,\ra,\rb,lsr #22 bic \ra,\ra,#7 RYMS \rc,\rd,7 umull \rd,\re,\ra,\rc RYMS \rc,\rd,7 mla \re,\ra,\rd,\re mla \re,\rb,\rc,\re RXMS \rc,\rd,0 sub \re,\re,\rc,lsl #18 orr \ra,\ra,\re,lsr #29 sub \ra,\ra,#1 WXDD \ra,\rb NRDD RDDD \rzl,\rzh .endm .macro dcp_dsqrt_fast_m rzl,rzh,rxl,rxh,ra,rb,rc,rd,re WXUP \rxl,\rxh SQR0 RXMQ \rc,\rd umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd mov \rb,\rb,lsl #3 sub \rb,\rb,#2147483648 smmlsr \rc,\rc,\rb,\rc umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd movs \ra,\ra,lsr #28 adc \rb,\ra,\rb,lsl #4 smmulr \ra,\rb,\rc sub \rc,\rc,\ra,asr #1 umull \ra,\rb,\rc,\rd mov \rb,\rb,lsr #1 umull \rd,\ra,\rb,\rb RXMS \ra,\re,6 sub \ra,\ra,\rd smmulr \ra,\ra,\rc add \rb,\rb,\ra,asr #28 mov \ra,\ra,lsl #4 WXDQ \ra,\rb NRDD RDDQ \rzl,\rzh .endm .macro dcp_dsqrt_m rzl,rzh,rxl,rxh,ra,rb,rc,rd,re WXUP \rxl,\rxh SQR0 RXMQ \rc,\rd umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd mov \rb,\rb,lsl #3 sub \rb,\rb,#2147483648 smmlsr \rc,\rc,\rb,\rc umull \ra,\rb,\rc,\rc umull \ra,\rb,\rb,\rd movs \ra,\ra,lsr #28 adc \rb,\ra,\rb,lsl #4 smmulr \ra,\rb,\rc sub \rc,\rc,\ra,asr #1 umull \ra,\rb,\rc,\rd mov \rb,\rb,lsr #1 umull \rd,\ra,\rb,\rb RXMS \ra,\re,6 sub \rd,\ra,\rd smmulr \rd,\rd,\rc add \rb,\rb,\rd,asr #28 mov \rd,\rd,lsl #4 bic \rd,\rd,#255 orr \rd,\rd,#128 umull \re,\rc,\rd,\rd mul \re,\rb,\rb umlal \rc,\re,\rb,\rd umlal \rc,\re,\rb,\rd sub \re,\re,\ra orr \rd,\rd,\re,lsr #24 sub \rd,\rd,#11 WXDQ \rd,\rb NRDD RDDQ \rzl,\rzh .endm .macro dcp_dclassify_m rz,rxl,rxh WXUP \rxl,\rxh RXVD \rz .endm .macro dcp_dcmp_m rz,rxl,rxh,ryl,ryh WXUP \rxl,\rxh WYUP \ryl,\ryh ADD0 RCMP \rz .endm .macro dcp_float2double_m rzl,rzh,rx WXYU \rx,\rx NRDD RDDG \rzl,\rzh .endm .macro dcp_double2float_m rz,rxl,rxh WXUP \rxl,\rxh NRDF RDFG \rz .endm .macro dcp_int2double_m rzl,rzh,rx WXIC \rx,\rx ADD0 SUB1 NRDD RDDS \rzl,\rzh .endm .macro dcp_uint2double_m rzl,rzh,rx WXUC \rx,\rx ADD0 SUB1 NRDD RDDS \rzl,\rzh .endm .macro dcp_int2float_m rz,rx WXIC \rx,\rx ADD0 SUB1 NRDF RDFS \rz .endm .macro dcp_uint2float_m rz,rx WXUC \rx,\rx ADD0 SUB1 NRDF RDFS \rz .endm .macro dcp_double2int_m rz,rxl,rxh WXDC \rxl,\rxh ADD0 ADD1 NTDC RDIC \rz .endm .macro dcp_double2uint_m rz,rxl,rxh WXDC \rxl,\rxh ADD0 ADD1 NTDC RDUC \rz .endm .macro dcp_float2int_m rz,rx WXFC \rx,\rx ADD0 ADD1 NTDC RDIC \rz .endm .macro dcp_float2uint_m rz,rx WXFC \rx,\rx ADD0 ADD1 NTDC RDUC \rz .endm .macro dcp_double2int_r_m rz,rxl,rxh WXDC \rxl,\rxh ADD0 ADD1 NRDC RDIC \rz .endm .macro dcp_double2uint_r_m rz,rxl,rxh WXDC \rxl,\rxh ADD0 ADD1 NRDC RDUC \rz .endm .macro dcp_float2int_r_m rz,rx WXFC \rx,\rx ADD0 ADD1 NRDC RDIC \rz .endm .macro dcp_float2uint_r_m rz,rx WXFC \rx,\rx ADD0 ADD1 NRDC RDUC \rz .endm