]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/riscv: implement RV64I integer computational instructions
authorJoel Sing <joel@sing.id.au>
Wed, 18 Sep 2019 14:59:26 +0000 (00:59 +1000)
committerJoel Sing <joel@sing.id.au>
Tue, 24 Sep 2019 04:19:31 +0000 (04:19 +0000)
Add support for assembling RV64I integer computational instructions.

Based on the riscv-go port.

Updates #27532

Integer Computational Instructions (RV64I)

Change-Id: I1a082b3901c997da309d737d081f57ea2821bc62
Reviewed-on: https://go-review.googlesource.com/c/go/+/196838
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/testdata/riscvenc.s
src/cmd/internal/obj/riscv/obj.go

index 1902138504fad2c9edfe276b4a99b854a76668a7..8ee7f18a16ea45450eaa166a39cbb73ddf3fe04f 100644 (file)
@@ -95,6 +95,17 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0
        SB      $0, X5, X6                              // 23005300
        SB      $4, X5, X6                              // 23025300
 
+        // 5.2: Integer Computational Instructions (RV64I)
+       ADDIW   $1, X5, X6                              // 1b831200
+       SLLIW   $1, X5, X6                              // 1b931200
+       SRLIW   $1, X5, X6                              // 1bd31200
+       SRAIW   $1, X5, X6                              // 1bd31240
+       ADDW    X5, X6, X7                              // bb035300
+       SLLW    X5, X6, X7                              // bb135300
+       SRLW    X5, X6, X7                              // bb535300
+       SUBW    X5, X6, X7                              // bb035340
+       SRAW    X5, X6, X7                              // bb535340
+
        // 5.3: Load and Store Instructions (RV64I)
        LD      $0, X5, X6                              // 03b30200
        LD      $4, X5, X6                              // 03b34200
index 1182053191822452030f83f8d11f18c5220fbc53..46188c1e300639aec971695ce382eb8329ffb155 100644 (file)
@@ -401,6 +401,17 @@ var encodingForAs = [ALAST & obj.AMask]encoding{
        ASH & obj.AMask:  sIEncoding,
        ASB & obj.AMask:  sIEncoding,
 
+       // 5.2: Integer Computational Instructions (RV64I)
+       AADDIW & obj.AMask: iIEncoding,
+       ASLLIW & obj.AMask: iIEncoding,
+       ASRLIW & obj.AMask: iIEncoding,
+       ASRAIW & obj.AMask: iIEncoding,
+       AADDW & obj.AMask:  rIIIEncoding,
+       ASLLW & obj.AMask:  rIIIEncoding,
+       ASRLW & obj.AMask:  rIIIEncoding,
+       ASUBW & obj.AMask:  rIIIEncoding,
+       ASRAW & obj.AMask:  rIIIEncoding,
+
        // 5.3: Load and Store Instructions (RV64I)
        ALD & obj.AMask: iIEncoding,
        ASD & obj.AMask: sIEncoding,