| @@ -67,7 +67,6 @@ ConvDw3x3Int8Neon64: | |||||
| ld1 {v7.8h}, [x2], x20 | ld1 {v7.8h}, [x2], x20 | ||||
| ld1 {v8.8h}, [x2], x20 | ld1 {v8.8h}, [x2], x20 | ||||
| Loop: | |||||
| mov x16, x1 | mov x16, x1 | ||||
| add x17, x16, x5 | add x17, x16, x5 | ||||
| add x18, x17, x5 | add x18, x17, x5 | ||||
| @@ -83,6 +82,8 @@ Loop: | |||||
| ld1 {v21.4s}, [x3] | ld1 {v21.4s}, [x3] | ||||
| ld1 {v22.4s}, [x19] | ld1 {v22.4s}, [x19] | ||||
| ld1 {v23.4s}, [x3] | |||||
| ld1 {v24.4s}, [x19] | |||||
| // subtract input zp | // subtract input zp | ||||
| ssubl v9.8h, v9.8b, v25.8b | ssubl v9.8h, v9.8b, v25.8b | ||||
| @@ -95,31 +96,160 @@ Loop: | |||||
| ssubl v18.8h, v18.8b, v25.8b | ssubl v18.8h, v18.8b, v25.8b | ||||
| ssubl v19.8h, v19.8b, v25.8b | ssubl v19.8h, v19.8b, v25.8b | ||||
| cmp w8, #2 | |||||
| beq WIDTH2_LEFT | |||||
| cmp w8, #1 | cmp w8, #1 | ||||
| beq Width1 | |||||
| beq WIDTH1_LEFT | |||||
| Width2: | |||||
| HEIGHT1_LOOP: | |||||
| smlal v21.4s, v0.4h, v9.4h | |||||
| ld1 {v12.8b}, [x16] | ld1 {v12.8b}, [x16] | ||||
| smlal2 v22.4s, v0.8h, v9.8h | |||||
| ld1 {v16.8b}, [x17] | ld1 {v16.8b}, [x17] | ||||
| smlal v23.4s, v0.4h, v10.4h | |||||
| smlal2 v24.4s, v0.8h, v10.8h | |||||
| ld1 {v20.8b}, [x18] | ld1 {v20.8b}, [x18] | ||||
| ld1 {v23.4s}, [x3] | |||||
| ld1 {v24.4s}, [x19] | |||||
| add x1, x1, x21 | |||||
| ssubl v12.8h, v12.8b, v25.8b | ssubl v12.8h, v12.8b, v25.8b | ||||
| smlal v21.4s, v1.4h, v10.4h | |||||
| mov x16, x1 | |||||
| add x17, x16, x5 | |||||
| add x18, x17, x5 | |||||
| smlal2 v22.4s, v1.8h, v10.8h | |||||
| ld1 {v9.8b}, [x16], x4 | |||||
| ssubl v16.8h, v16.8b, v25.8b | ssubl v16.8h, v16.8b, v25.8b | ||||
| smlal v23.4s, v1.4h, v11.4h | |||||
| ld1 {v10.8b}, [x16], x4 | |||||
| ssubl v20.8h, v20.8b, v25.8b | ssubl v20.8h, v20.8b, v25.8b | ||||
| smlal2 v24.4s, v1.8h, v11.8h | |||||
| smlal v21.4s, v2.4h, v11.4h | |||||
| smlal2 v22.4s, v2.8h, v11.8h | |||||
| ld1 {v11.8b}, [x16], x4 | |||||
| smlal v23.4s, v2.4h, v12.4h | |||||
| smlal2 v24.4s, v2.8h, v12.8h | |||||
| smlal v21.4s, v3.4h, v13.4h | |||||
| smlal2 v22.4s, v3.8h, v13.8h | |||||
| ld1 {v13.8b}, [x17], x4 | |||||
| smlal v23.4s, v3.4h, v14.4h | |||||
| smlal2 v24.4s, v3.8h, v14.8h | |||||
| smlal v21.4s, v4.4h, v14.4h | |||||
| smlal2 v22.4s, v4.8h, v14.8h | |||||
| ld1 {v14.8b}, [x17], x4 | |||||
| smlal v23.4s, v4.4h, v15.4h | |||||
| smlal2 v24.4s, v4.8h, v15.8h | |||||
| smlal v21.4s, v5.4h, v15.4h | |||||
| smlal2 v22.4s, v5.8h, v15.8h | |||||
| ld1 {v15.8b}, [x17], x4 | |||||
| smlal v23.4s, v5.4h, v16.4h | |||||
| smlal2 v24.4s, v5.8h, v16.8h | |||||
| smlal v21.4s, v6.4h, v17.4h | |||||
| smlal2 v22.4s, v6.8h, v17.8h | |||||
| ld1 {v17.8b}, [x18], x4 | |||||
| smlal v23.4s, v6.4h, v18.4h | |||||
| smlal2 v24.4s, v6.8h, v18.8h | |||||
| smlal v21.4s, v7.4h, v18.4h | |||||
| smlal2 v22.4s, v7.8h, v18.8h | |||||
| ld1 {v18.8b}, [x18], x4 | |||||
| smlal v23.4s, v7.4h, v19.4h | |||||
| smlal2 v24.4s, v7.8h, v19.8h | |||||
| smlal v21.4s, v8.4h, v19.4h | |||||
| smlal2 v22.4s, v8.8h, v19.8h | |||||
| ld1 {v19.8b}, [x18], x4 | |||||
| smlal v23.4s, v8.4h, v20.4h | |||||
| smlal2 v24.4s, v8.8h, v20.8h | |||||
| // Apply left shfit | |||||
| sqshl v21.4s, v21.4s, v26.4s | |||||
| sqshl v22.4s, v22.4s, v26.4s | |||||
| sqshl v23.4s, v23.4s, v26.4s | |||||
| sqshl v24.4s, v24.4s, v26.4s | |||||
| // Apply the fixed-point part of the multiplier. | |||||
| sqrdmulh v21.4s, v21.4s, v27.4s | |||||
| sqrdmulh v22.4s, v22.4s, v27.4s | |||||
| sqrdmulh v23.4s, v23.4s, v27.4s | |||||
| sqrdmulh v24.4s, v24.4s, v27.4s | |||||
| // Apply right shfit | |||||
| and v12.16b, v28.16b, v21.16b | |||||
| sshr v12.4s, v12.4s, #31 | |||||
| sqadd v21.4s, v21.4s, v12.4s | |||||
| srshl v21.4s, v21.4s, v28.4s | |||||
| and v16.16b, v28.16b, v22.16b | |||||
| sshr v16.4s, v16.4s, #31 | |||||
| sqadd v22.4s, v22.4s, v16.4s | |||||
| srshl v22.4s, v22.4s, v28.4s | |||||
| and v20.16b, v28.16b, v23.16b | |||||
| sshr v20.4s, v20.4s, #31 | |||||
| sqadd v23.4s, v23.4s, v20.4s | |||||
| srshl v23.4s, v23.4s, v28.4s | |||||
| and v12.16b, v28.16b, v24.16b | |||||
| sshr v12.4s, v12.4s, #31 | |||||
| sqadd v24.4s, v24.4s, v12.4s | |||||
| srshl v24.4s, v24.4s, v28.4s | |||||
| // Add output zero point | |||||
| sqadd v21.4s, v21.4s, v29.4s | |||||
| sqadd v22.4s, v22.4s, v29.4s | |||||
| sqadd v23.4s, v23.4s, v29.4s | |||||
| sqadd v24.4s, v24.4s, v29.4s | |||||
| // Apply min bound | |||||
| smax v21.4s, v21.4s, v30.4s | |||||
| smax v22.4s, v22.4s, v30.4s | |||||
| smax v23.4s, v23.4s, v30.4s | |||||
| smax v24.4s, v24.4s, v30.4s | |||||
| // Apply max bound | |||||
| smin v21.4s, v21.4s, v31.4s | |||||
| smin v22.4s, v22.4s, v31.4s | |||||
| smin v23.4s, v23.4s, v31.4s | |||||
| smin v24.4s, v24.4s, v31.4s | |||||
| sqxtn v21.4h, v21.4s | |||||
| sqxtn2 v21.8h, v22.4s | |||||
| ld1 {v22.4s}, [x19] | |||||
| ssubl v9.8h, v9.8b, v25.8b | |||||
| ssubl v10.8h, v10.8b, v25.8b | |||||
| sqxtn v23.4h, v23.4s | |||||
| sqxtn2 v23.8h, v24.4s | |||||
| ld1 {v24.4s}, [x19] | |||||
| sqxtn v21.8b, v21.8h | |||||
| sqxtn2 v21.16b, v23.8h | |||||
| st1 {v21.8b}, [x0], x6 | |||||
| mov v23.d[0], v21.d[1] | |||||
| ld1 {v21.4s}, [x3] | |||||
| st1 {v23.8b}, [x0], x6 | |||||
| ssubl v11.8h, v11.8b, v25.8b | |||||
| ssubl v13.8h, v13.8b, v25.8b | |||||
| ld1 {v23.4s}, [x3] | |||||
| ssubl v14.8h, v14.8b, v25.8b | |||||
| ssubl v15.8h, v15.8b, v25.8b | |||||
| ssubl v17.8h, v17.8b, v25.8b | |||||
| ssubl v18.8h, v18.8b, v25.8b | |||||
| ssubl v19.8h, v19.8b, v25.8b | |||||
| sub w8, w8, #2 | |||||
| cmp w8, #2 | |||||
| bgt HEIGHT1_LOOP | |||||
| cmp w8, #2 | |||||
| blt WIDTH1_LEFT | |||||
| WIDTH2_LEFT: | |||||
| smlal v21.4s, v0.4h, v9.4h | smlal v21.4s, v0.4h, v9.4h | ||||
| smlal2 v22.4s, v0.8h, v9.8h | smlal2 v22.4s, v0.8h, v9.8h | ||||
| ld1 {v12.8b}, [x16] | |||||
| ssubl v12.8h, v12.8b, v25.8b | |||||
| smlal v23.4s, v0.4h, v10.4h | smlal v23.4s, v0.4h, v10.4h | ||||
| smlal2 v24.4s, v0.8h, v10.8h | smlal2 v24.4s, v0.8h, v10.8h | ||||
| smlal v21.4s, v1.4h, v10.4h | smlal v21.4s, v1.4h, v10.4h | ||||
| smlal2 v22.4s, v1.8h, v10.8h | smlal2 v22.4s, v1.8h, v10.8h | ||||
| ld1 {v16.8b}, [x17] | |||||
| smlal v23.4s, v1.4h, v11.4h | smlal v23.4s, v1.4h, v11.4h | ||||
| smlal2 v24.4s, v1.8h, v11.8h | smlal2 v24.4s, v1.8h, v11.8h | ||||
| smlal v21.4s, v2.4h, v11.4h | smlal v21.4s, v2.4h, v11.4h | ||||
| smlal2 v22.4s, v2.8h, v11.8h | smlal2 v22.4s, v2.8h, v11.8h | ||||
| ld1 {v20.8b}, [x18] | |||||
| smlal v23.4s, v2.4h, v12.4h | smlal v23.4s, v2.4h, v12.4h | ||||
| smlal2 v24.4s, v2.8h, v12.8h | smlal2 v24.4s, v2.8h, v12.8h | ||||
| smlal v21.4s, v3.4h, v13.4h | smlal v21.4s, v3.4h, v13.4h | ||||
| @@ -128,10 +258,12 @@ Width2: | |||||
| smlal2 v24.4s, v3.8h, v14.8h | smlal2 v24.4s, v3.8h, v14.8h | ||||
| smlal v21.4s, v4.4h, v14.4h | smlal v21.4s, v4.4h, v14.4h | ||||
| smlal2 v22.4s, v4.8h, v14.8h | smlal2 v22.4s, v4.8h, v14.8h | ||||
| ssubl v16.8h, v16.8b, v25.8b | |||||
| smlal v23.4s, v4.4h, v15.4h | smlal v23.4s, v4.4h, v15.4h | ||||
| smlal2 v24.4s, v4.8h, v15.8h | smlal2 v24.4s, v4.8h, v15.8h | ||||
| smlal v21.4s, v5.4h, v15.4h | smlal v21.4s, v5.4h, v15.4h | ||||
| smlal2 v22.4s, v5.8h, v15.8h | smlal2 v22.4s, v5.8h, v15.8h | ||||
| ssubl v20.8h, v20.8b, v25.8b | |||||
| smlal v23.4s, v5.4h, v16.4h | smlal v23.4s, v5.4h, v16.4h | ||||
| smlal2 v24.4s, v5.8h, v16.8h | smlal2 v24.4s, v5.8h, v16.8h | ||||
| smlal v21.4s, v6.4h, v17.4h | smlal v21.4s, v6.4h, v17.4h | ||||
| @@ -201,16 +333,12 @@ Width2: | |||||
| sqxtn2 v23.8h, v24.4s | sqxtn2 v23.8h, v24.4s | ||||
| sqxtn v21.8b, v21.8h | sqxtn v21.8b, v21.8h | ||||
| sqxtn2 v21.16b, v23.8h | sqxtn2 v21.16b, v23.8h | ||||
| st1 {v21.8b}, [x0], x6 | st1 {v21.8b}, [x0], x6 | ||||
| mov v23.d[0], v21.d[1] | mov v23.d[0], v21.d[1] | ||||
| st1 {v23.8b}, [x0], x6 | st1 {v23.8b}, [x0], x6 | ||||
| sub w8, w8, #2 | |||||
| cbz w8, End | |||||
| add x1, x1, x21 | |||||
| b Loop | |||||
| b End | |||||
| Width1: | |||||
| WIDTH1_LEFT: | |||||
| smlal v21.4s, v0.4h, v9.4h | smlal v21.4s, v0.4h, v9.4h | ||||
| smlal2 v22.4s, v0.8h, v9.8h | smlal2 v22.4s, v0.8h, v9.8h | ||||
| smlal v21.4s, v1.4h, v10.4h | smlal v21.4s, v1.4h, v10.4h | ||||
| @@ -263,12 +391,7 @@ Width1: | |||||
| sqxtn v21.4h, v21.4s | sqxtn v21.4h, v21.4s | ||||
| sqxtn2 v21.8h, v22.4s | sqxtn2 v21.8h, v22.4s | ||||
| sqxtn v21.8b, v21.8h | sqxtn v21.8b, v21.8h | ||||
| st1 {v21.8b}, [x0], x6 | st1 {v21.8b}, [x0], x6 | ||||
| sub w8, w8, #1 | |||||
| cbz w8, End | |||||
| add x1, x1, x4 | |||||
| b Loop | |||||
| End: | End: | ||||
| sub sp, sp, #160 | sub sp, sp, #160 | ||||