diff --git a/.github/workflows/test_s390x.yaml b/.github/workflows/test_s390x.yaml new file mode 100644 index 0000000..444e641 --- /dev/null +++ b/.github/workflows/test_s390x.yaml @@ -0,0 +1,36 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: s390x-qemu + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + + test: + strategy: + matrix: + go-version: [1.19.x] + arch: [s390x] + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: ${{ matrix.go-version }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Check out code + uses: actions/checkout@v4 + + - name: Test bigmod + run: go test -v -short ./internal/bigmod/... + + - name: Test subtle + run: go test -v -short ./internal/subtle/... diff --git a/internal/sm2ec/p256_asm_table_test.go b/internal/sm2ec/p256_asm_table_test.go index 1383bc1..9ce2247 100644 --- a/internal/sm2ec/p256_asm_table_test.go +++ b/internal/sm2ec/p256_asm_table_test.go @@ -1,4 +1,4 @@ -//go:build (amd64 && !purego && !plugin) || (arm64 && !purego) +//go:build !purego && (amd64 || arm64) package sm2ec diff --git a/internal/subtle/xor_generic.go b/internal/subtle/xor_generic.go index e9db8d8..18dafd0 100644 --- a/internal/subtle/xor_generic.go +++ b/internal/subtle/xor_generic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // -//go:build purego || !(amd64 || arm64) +//go:build purego || !(amd64 || arm64 || s390x) package subtle diff --git a/internal/subtle/xor_s390x.go b/internal/subtle/xor_s390x.go new file mode 100644 index 0000000..6fbacf9 --- /dev/null +++ b/internal/subtle/xor_s390x.go @@ -0,0 +1,10 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +//go:build !purego + +package subtle + +//go:noescape +func xorBytes(dst, a, b *byte, n int) diff --git a/internal/subtle/xor_s390x.s b/internal/subtle/xor_s390x.s new file mode 100644 index 0000000..0e3f633 --- /dev/null +++ b/internal/subtle/xor_s390x.s @@ -0,0 +1,36 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !purego + +#include "textflag.h" + +// func xorBytes(dst, a, b *byte, n int) +TEXT ·xorBytes(SB),NOSPLIT,$0-32 + MOVD dst+0(FP), R1 + MOVD a+8(FP), R2 + MOVD b+16(FP), R3 + MOVD n+24(FP), R4 + + MOVD $0, R5 + CMPBLT R4, $8, tail +loop: + MOVD 0(R2)(R5*1), R7 + MOVD 0(R3)(R5*1), R8 + XOR R7, R8 + MOVD R8, 0(R1)(R5*1) + LAY 8(R5), R5 + SUB $8, R4 + CMPBGE R4, $8, loop +tail: + CMPBEQ R4, $0, done + MOVB 0(R2)(R5*1), R7 + MOVB 0(R3)(R5*1), R8 + XOR R7, R8 + MOVB R8, 0(R1)(R5*1) + LAY 1(R5), R5 + SUB $1, R4 + BR tail +done: + RET