From d4c1be32e29599a5e29b4104d31ab073924195bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Mon, 10 Apr 2023 10:45:45 +0800 Subject: [PATCH] protect flags --- decode_amd64.s | 4 +++- encode_amd64.s | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/decode_amd64.s b/decode_amd64.s index aadc85d..3518be6 100644 --- a/decode_amd64.s +++ b/decode_amd64.s @@ -5,13 +5,14 @@ // dec128blk1(mask uint128be, in, out []byte) // len(in)>0, len(in)%16==0, len(out)==len(in)/16 -TEXT ·dec128blk1(SB), NOSPLIT, $0-64 +TEXT ·dec128blk1(SB), NOSPLIT, $8-64 MOVQ ·mask+0(FP), DX BSWAPQ DX MOVQ ·in+16(FP), SI MOVQ ·in+24(FP), CX SHRQ $4, CX MOVQ ·in+40(FP), DI + PUSHFQ // go forward CLD lop: @@ -53,4 +54,5 @@ lop: STOSB LOOP lop + POPFQ RET diff --git a/encode_amd64.s b/encode_amd64.s index 61691c6..0b18509 100644 --- a/encode_amd64.s +++ b/encode_amd64.s @@ -5,7 +5,7 @@ // enc16blk1(mask uint16, in, out []byte) // for bit 1 (actual enc128blk1) -TEXT ·enc16blk1(SB), NOSPLIT, $0-56 +TEXT ·enc16blk1(SB), NOSPLIT, $8-56 // create mask MOVQ ·mask+0(FP), BX ANDQ $0xffff, BX @@ -23,6 +23,7 @@ TEXT ·enc16blk1(SB), NOSPLIT, $0-56 MOVQ ·inlen+16(FP), CX // load dest addr MOVQ ·out+32(FP), DI + PUSHFQ // go forward CLD lop: @@ -63,11 +64,12 @@ lop: BSWAPQ AX STOSQ LOOP lop + POPFQ RET // enc64blk2(mask uint64, in, out []byte) // len(in)!=0, len(out)==len(in)*8 -TEXT ·enc64blk2(SB), NOSPLIT, $0-56 +TEXT ·enc64blk2(SB), NOSPLIT, $8-56 // load mask MOVQ ·mask+0(FP), BX // load source addr @@ -76,6 +78,7 @@ TEXT ·enc64blk2(SB), NOSPLIT, $0-56 MOVQ ·inlen+16(FP), CX // load dest addr MOVQ ·out+32(FP), DI + PUSHFQ // go forward CLD lop: @@ -101,11 +104,12 @@ lop: BSWAPQ AX STOSQ LOOP lop + POPFQ RET // enc32blk4(mask uint32, in, out []byte) // len(in)!=0, len(out)==len(in)*4 -TEXT ·enc32blk4(SB), NOSPLIT, $0-56 +TEXT ·enc32blk4(SB), NOSPLIT, $8-56 // load mask MOVQ ·mask+0(FP), BX // load source addr @@ -114,6 +118,7 @@ TEXT ·enc32blk4(SB), NOSPLIT, $0-56 MOVQ ·inlen+16(FP), CX // load dest addr MOVQ ·out+32(FP), DI + PUSHFQ // go forward CLD lop: @@ -129,11 +134,12 @@ lop: BSWAPL AX STOSL LOOP lop + POPFQ RET // func enc16blk8(mask uint16, in, out []byte) // len(in)!=0, len(out)==len(in)*2 -TEXT ·enc16blk8(SB), NOSPLIT, $0-56 +TEXT ·enc16blk8(SB), NOSPLIT, $8-56 // load mask MOVQ ·mask+0(FP), BX // load source addr @@ -142,6 +148,7 @@ TEXT ·enc16blk8(SB), NOSPLIT, $0-56 MOVQ ·inlen+16(FP), CX // load dest addr MOVQ ·out+32(FP), DI + PUSHFQ // go forward CLD lop: @@ -152,4 +159,5 @@ lop: RORW $8, AX STOSW LOOP lop + POPFQ RET