diff options
author | 2025-03-09 17:47:56 +0100 | |
---|---|---|
committer | 2025-03-10 01:59:49 +0100 | |
commit | 3ac1ee16f377d31a0fb80c8dae28b6239ac4229e (patch) | |
tree | f61faa581feaaeaba2542b9f2b8234a590684413 /vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go | |
parent | [chore] update URLs to forked source (diff) | |
download | gotosocial-3ac1ee16f377d31a0fb80c8dae28b6239ac4229e.tar.xz |
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go')
-rw-r--r-- | vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go | 644 |
1 files changed, 0 insertions, 644 deletions
diff --git a/vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go b/vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go deleted file mode 100644 index 63a4e9e9d..000000000 --- a/vendor/github.com/twitchyliquid64/golang-asm/obj/riscv/cpu.go +++ /dev/null @@ -1,644 +0,0 @@ -// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. -// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) -// Portions Copyright © 1997-1999 Vita Nuova Limited -// Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com) -// Portions Copyright © 2004,2006 Bruce Ellis -// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) -// Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others -// Portions Copyright © 2009 The Go Authors. All rights reserved. -// Portions Copyright © 2019 The Go Authors. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -package riscv - -import "github.com/twitchyliquid64/golang-asm/obj" - -//go:generate go run ../stringer.go -i $GOFILE -o anames.go -p riscv - -const ( - // Base register numberings. - REG_X0 = obj.RBaseRISCV + iota - REG_X1 - REG_X2 - REG_X3 - REG_X4 - REG_X5 - REG_X6 - REG_X7 - REG_X8 - REG_X9 - REG_X10 - REG_X11 - REG_X12 - REG_X13 - REG_X14 - REG_X15 - REG_X16 - REG_X17 - REG_X18 - REG_X19 - REG_X20 - REG_X21 - REG_X22 - REG_X23 - REG_X24 - REG_X25 - REG_X26 - REG_X27 - REG_X28 - REG_X29 - REG_X30 - REG_X31 - - // FP register numberings. - REG_F0 - REG_F1 - REG_F2 - REG_F3 - REG_F4 - REG_F5 - REG_F6 - REG_F7 - REG_F8 - REG_F9 - REG_F10 - REG_F11 - REG_F12 - REG_F13 - REG_F14 - REG_F15 - REG_F16 - REG_F17 - REG_F18 - REG_F19 - REG_F20 - REG_F21 - REG_F22 - REG_F23 - REG_F24 - REG_F25 - REG_F26 - REG_F27 - REG_F28 - REG_F29 - REG_F30 - REG_F31 - - // This marks the end of the register numbering. - REG_END - - // General registers reassigned to ABI names. - REG_ZERO = REG_X0 - REG_RA = REG_X1 // aka REG_LR - REG_SP = REG_X2 - REG_GP = REG_X3 // aka REG_SB - REG_TP = REG_X4 // aka REG_G - REG_T0 = REG_X5 - REG_T1 = REG_X6 - REG_T2 = REG_X7 - REG_S0 = REG_X8 - REG_S1 = REG_X9 - REG_A0 = REG_X10 - REG_A1 = REG_X11 - REG_A2 = REG_X12 - REG_A3 = REG_X13 - REG_A4 = REG_X14 - REG_A5 = REG_X15 - REG_A6 = REG_X16 - REG_A7 = REG_X17 - REG_S2 = REG_X18 - REG_S3 = REG_X19 - REG_S4 = REG_X20 // aka REG_CTXT - REG_S5 = REG_X21 - REG_S6 = REG_X22 - REG_S7 = REG_X23 - REG_S8 = REG_X24 - REG_S9 = REG_X25 - REG_S10 = REG_X26 - REG_S11 = REG_X27 - REG_T3 = REG_X28 - REG_T4 = REG_X29 - REG_T5 = REG_X30 - REG_T6 = REG_X31 // aka REG_TMP - - // Go runtime register names. - REG_G = REG_TP // G pointer. - REG_CTXT = REG_S4 // Context for closures. - REG_LR = REG_RA // Link register. - REG_TMP = REG_T6 // Reserved for assembler use. - - // ABI names for floating point registers. - REG_FT0 = REG_F0 - REG_FT1 = REG_F1 - REG_FT2 = REG_F2 - REG_FT3 = REG_F3 - REG_FT4 = REG_F4 - REG_FT5 = REG_F5 - REG_FT6 = REG_F6 - REG_FT7 = REG_F7 - REG_FS0 = REG_F8 - REG_FS1 = REG_F9 - REG_FA0 = REG_F10 - REG_FA1 = REG_F11 - REG_FA2 = REG_F12 - REG_FA3 = REG_F13 - REG_FA4 = REG_F14 - REG_FA5 = REG_F15 - REG_FA6 = REG_F16 - REG_FA7 = REG_F17 - REG_FS2 = REG_F18 - REG_FS3 = REG_F19 - REG_FS4 = REG_F20 - REG_FS5 = REG_F21 - REG_FS6 = REG_F22 - REG_FS7 = REG_F23 - REG_FS8 = REG_F24 - REG_FS9 = REG_F25 - REG_FS10 = REG_F26 - REG_FS11 = REG_F27 - REG_FT8 = REG_F28 - REG_FT9 = REG_F29 - REG_FT10 = REG_F30 - REG_FT11 = REG_F31 - - // Names generated by the SSA compiler. - REGSP = REG_SP - REGG = REG_G -) - -// https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#dwarf-register-numbers -var RISCV64DWARFRegisters = map[int16]int16{ - // Integer Registers. - REG_X0: 0, - REG_X1: 1, - REG_X2: 2, - REG_X3: 3, - REG_X4: 4, - REG_X5: 5, - REG_X6: 6, - REG_X7: 7, - REG_X8: 8, - REG_X9: 9, - REG_X10: 10, - REG_X11: 11, - REG_X12: 12, - REG_X13: 13, - REG_X14: 14, - REG_X15: 15, - REG_X16: 16, - REG_X17: 17, - REG_X18: 18, - REG_X19: 19, - REG_X20: 20, - REG_X21: 21, - REG_X22: 22, - REG_X23: 23, - REG_X24: 24, - REG_X25: 25, - REG_X26: 26, - REG_X27: 27, - REG_X28: 28, - REG_X29: 29, - REG_X30: 30, - REG_X31: 31, - - // Floating-Point Registers. - REG_F0: 32, - REG_F1: 33, - REG_F2: 34, - REG_F3: 35, - REG_F4: 36, - REG_F5: 37, - REG_F6: 38, - REG_F7: 39, - REG_F8: 40, - REG_F9: 41, - REG_F10: 42, - REG_F11: 43, - REG_F12: 44, - REG_F13: 45, - REG_F14: 46, - REG_F15: 47, - REG_F16: 48, - REG_F17: 49, - REG_F18: 50, - REG_F19: 51, - REG_F20: 52, - REG_F21: 53, - REG_F22: 54, - REG_F23: 55, - REG_F24: 56, - REG_F25: 57, - REG_F26: 58, - REG_F27: 59, - REG_F28: 60, - REG_F29: 61, - REG_F30: 62, - REG_F31: 63, -} - -// Prog.Mark flags. -const ( - // NEED_PCREL_ITYPE_RELOC is set on AUIPC instructions to indicate that - // it is the first instruction in an AUIPC + I-type pair that needs a - // R_RISCV_PCREL_ITYPE relocation. - NEED_PCREL_ITYPE_RELOC = 1 << 0 - - // NEED_PCREL_STYPE_RELOC is set on AUIPC instructions to indicate that - // it is the first instruction in an AUIPC + S-type pair that needs a - // R_RISCV_PCREL_STYPE relocation. - NEED_PCREL_STYPE_RELOC = 1 << 1 -) - -// RISC-V mnemonics, as defined in the "opcodes" and "opcodes-pseudo" files -// from: -// -// https://github.com/riscv/riscv-opcodes -// -// As well as some pseudo-mnemonics (e.g. MOV) used only in the assembler. -// -// See also "The RISC-V Instruction Set Manual" at: -// -// https://riscv.org/specifications/ -// -// If you modify this table, you MUST run 'go generate' to regenerate anames.go! -const ( - // Unprivileged ISA (Document Version 20190608-Base-Ratified) - - // 2.4: Integer Computational Instructions - AADDI = obj.ABaseRISCV + obj.A_ARCHSPECIFIC + iota - ASLTI - ASLTIU - AANDI - AORI - AXORI - ASLLI - ASRLI - ASRAI - ALUI - AAUIPC - AADD - ASLT - ASLTU - AAND - AOR - AXOR - ASLL - ASRL - ASUB - ASRA - - // The SLL/SRL/SRA instructions differ slightly between RV32 and RV64, - // hence there are pseudo-opcodes for the RV32 specific versions. - ASLLIRV32 - ASRLIRV32 - ASRAIRV32 - - // 2.5: Control Transfer Instructions - AJAL - AJALR - ABEQ - ABNE - ABLT - ABLTU - ABGE - ABGEU - - // 2.6: Load and Store Instructions - ALW - ALWU - ALH - ALHU - ALB - ALBU - ASW - ASH - ASB - - // 2.7: Memory Ordering Instructions - AFENCE - AFENCEI - AFENCETSO - - // 5.2: Integer Computational Instructions (RV64I) - AADDIW - ASLLIW - ASRLIW - ASRAIW - AADDW - ASLLW - ASRLW - ASUBW - ASRAW - - // 5.3: Load and Store Instructions (RV64I) - ALD - ASD - - // 7.1: Multiplication Operations - AMUL - AMULH - AMULHU - AMULHSU - AMULW - ADIV - ADIVU - AREM - AREMU - ADIVW - ADIVUW - AREMW - AREMUW - - // 8.2: Load-Reserved/Store-Conditional Instructions - ALRD - ASCD - ALRW - ASCW - - // 8.3: Atomic Memory Operations - AAMOSWAPD - AAMOADDD - AAMOANDD - AAMOORD - AAMOXORD - AAMOMAXD - AAMOMAXUD - AAMOMIND - AAMOMINUD - AAMOSWAPW - AAMOADDW - AAMOANDW - AAMOORW - AAMOXORW - AAMOMAXW - AAMOMAXUW - AAMOMINW - AAMOMINUW - - // 10.1: Base Counters and Timers - ARDCYCLE - ARDCYCLEH - ARDTIME - ARDTIMEH - ARDINSTRET - ARDINSTRETH - - // 11.2: Floating-Point Control and Status Register - AFRCSR - AFSCSR - AFRRM - AFSRM - AFRFLAGS - AFSFLAGS - AFSRMI - AFSFLAGSI - - // 11.5: Single-Precision Load and Store Instructions - AFLW - AFSW - - // 11.6: Single-Precision Floating-Point Computational Instructions - AFADDS - AFSUBS - AFMULS - AFDIVS - AFMINS - AFMAXS - AFSQRTS - AFMADDS - AFMSUBS - AFNMADDS - AFNMSUBS - - // 11.7: Single-Precision Floating-Point Conversion and Move Instructions - AFCVTWS - AFCVTLS - AFCVTSW - AFCVTSL - AFCVTWUS - AFCVTLUS - AFCVTSWU - AFCVTSLU - AFSGNJS - AFSGNJNS - AFSGNJXS - AFMVXS - AFMVSX - AFMVXW - AFMVWX - - // 11.8: Single-Precision Floating-Point Compare Instructions - AFEQS - AFLTS - AFLES - - // 11.9: Single-Precision Floating-Point Classify Instruction - AFCLASSS - - // 12.3: Double-Precision Load and Store Instructions - AFLD - AFSD - - // 12.4: Double-Precision Floating-Point Computational Instructions - AFADDD - AFSUBD - AFMULD - AFDIVD - AFMIND - AFMAXD - AFSQRTD - AFMADDD - AFMSUBD - AFNMADDD - AFNMSUBD - - // 12.5: Double-Precision Floating-Point Conversion and Move Instructions - AFCVTWD - AFCVTLD - AFCVTDW - AFCVTDL - AFCVTWUD - AFCVTLUD - AFCVTDWU - AFCVTDLU - AFCVTSD - AFCVTDS - AFSGNJD - AFSGNJND - AFSGNJXD - AFMVXD - AFMVDX - - // 12.6: Double-Precision Floating-Point Compare Instructions - AFEQD - AFLTD - AFLED - - // 12.7: Double-Precision Floating-Point Classify Instruction - AFCLASSD - - // 13.1 Quad-Precision Load and Store Instructions - AFLQ - AFSQ - - // 13.2: Quad-Precision Computational Instructions - AFADDQ - AFSUBQ - AFMULQ - AFDIVQ - AFMINQ - AFMAXQ - AFSQRTQ - AFMADDQ - AFMSUBQ - AFNMADDQ - AFNMSUBQ - - // 13.3 Quad-Precision Convert and Move Instructions - AFCVTWQ - AFCVTLQ - AFCVTSQ - AFCVTDQ - AFCVTQW - AFCVTQL - AFCVTQS - AFCVTQD - AFCVTWUQ - AFCVTLUQ - AFCVTQWU - AFCVTQLU - AFSGNJQ - AFSGNJNQ - AFSGNJXQ - AFMVXQ - AFMVQX - - // 13.4 Quad-Precision Floating-Point Compare Instructions - AFEQQ - AFLEQ - AFLTQ - - // 13.5 Quad-Precision Floating-Point Classify Instruction - AFCLASSQ - - // Privileged ISA (Version 20190608-Priv-MSU-Ratified) - - // 3.1.9: Instructions to Access CSRs - ACSRRW - ACSRRS - ACSRRC - ACSRRWI - ACSRRSI - ACSRRCI - - // 3.2.1: Environment Call and Breakpoint - AECALL - ASCALL - AEBREAK - ASBREAK - - // 3.2.2: Trap-Return Instructions - AMRET - ASRET - AURET - ADRET - - // 3.2.3: Wait for Interrupt - AWFI - - // 4.2.1: Supervisor Memory-Management Fence Instruction - ASFENCEVMA - - // Hypervisor Memory-Management Instructions - AHFENCEGVMA - AHFENCEVVMA - - // The escape hatch. Inserts a single 32-bit word. - AWORD - - // Pseudo-instructions. These get translated by the assembler into other - // instructions, based on their operands. - ABEQZ - ABGEZ - ABGT - ABGTU - ABGTZ - ABLE - ABLEU - ABLEZ - ABLTZ - ABNEZ - AFNEGD - AFNEGS - AFNED - AFNES - AMOV - AMOVB - AMOVBU - AMOVF - AMOVD - AMOVH - AMOVHU - AMOVW - AMOVWU - ANEG - ANEGW - ANOT - ASEQZ - ASNEZ - - // End marker - ALAST -) - -// All unary instructions which write to their arguments (as opposed to reading -// from them) go here. The assembly parser uses this information to populate -// its AST in a semantically reasonable way. -// -// Any instructions not listed here are assumed to either be non-unary or to read -// from its argument. -var unaryDst = map[obj.As]bool{ - ARDCYCLE: true, - ARDCYCLEH: true, - ARDTIME: true, - ARDTIMEH: true, - ARDINSTRET: true, - ARDINSTRETH: true, -} - -// Instruction encoding masks. -const ( - // ITypeImmMask is a mask including only the immediate portion of - // I-type instructions. - ITypeImmMask = 0xfff00000 - - // STypeImmMask is a mask including only the immediate portion of - // S-type instructions. - STypeImmMask = 0xfe000f80 - - // UTypeImmMask is a mask including only the immediate portion of - // U-type instructions. - UTypeImmMask = 0xfffff000 - - // UJTypeImmMask is a mask including only the immediate portion of - // UJ-type instructions. - UJTypeImmMask = UTypeImmMask -) |