!sum # Integers # ShiftAll* - go: ShiftAllLeft asm: "VPSLL[WDQ]" in: - &any go: $t - &vecAsScalar64 go: "Uint.*" treatLikeAScalarOfSize: 64 out: - *any - go: ShiftAllRight signed: false asm: "VPSRL[WDQ]" in: - &uint go: $t base: uint - *vecAsScalar64 out: - *uint - go: ShiftAllRight signed: true asm: "VPSRA[WDQ]" in: - &int go: $t base: int - *vecAsScalar64 out: - *int - go: shiftAllLeftConst asm: "VPSLL[WDQ]" in: - *any - &imm class: immediate immOffset: 0 out: - *any - go: shiftAllRightConst asm: "VPSRL[WDQ]" in: - *int - *imm out: - *int - go: shiftAllRightConst asm: "VPSRA[WDQ]" in: - *uint - *imm out: - *uint # Shift* (variable) - go: ShiftLeft asm: "VPSLLV[WD]" in: - *any - *any out: - *any # XED data of VPSLLVQ marks the element bits 32 which is off to the actual semantic, we need to overwrite # it to 64. - go: ShiftLeft asm: "VPSLLVQ" in: - &anyOverwriteElemBits go: $t overwriteElementBits: 64 - *anyOverwriteElemBits out: - *anyOverwriteElemBits - go: ShiftRight signed: false asm: "VPSRLV[WD]" in: - *uint - *uint out: - *uint # XED data of VPSRLVQ needs the same overwrite as VPSLLVQ. - go: ShiftRight signed: false asm: "VPSRLVQ" in: - &uintOverwriteElemBits go: $t base: uint overwriteElementBits: 64 - *uintOverwriteElemBits out: - *uintOverwriteElemBits - go: ShiftRight signed: true asm: "VPSRAV[WDQ]" in: - *int - *int out: - *int # Rotate - go: RotateAllLeft asm: "VPROL[DQ]" in: - *any - &pureImm class: immediate immOffset: 0 name: shift out: - *any - go: RotateAllRight asm: "VPROR[DQ]" in: - *any - *pureImm out: - *any - go: RotateLeft asm: "VPROLV[DQ]" in: - *any - *any out: - *any - go: RotateRight asm: "VPRORV[DQ]" in: - *any - *any out: - *any # Bizzare shifts. - go: ShiftAllLeftConcat asm: "VPSHLD[WDQ]" in: - *any - *any - *pureImm out: - *any - go: ShiftAllRightConcat asm: "VPSHRD[WDQ]" in: - *any - *any - *pureImm out: - *any - go: ShiftLeftConcat asm: "VPSHLDV[WDQ]" in: - *any - *any - *any out: - *any - go: ShiftRightConcat asm: "VPSHRDV[WDQ]" in: - *any - *any - *any out: - *any