mirror of
https://github.com/golang/go
synced 2024-11-19 11:44:45 -07:00
cmd/internal/obj, cmd/asm: get rid of obj.ADATA
Just recognize "DATA" as a special pseudo op word in the assembler directly. Change-Id: I508e111fd71f561efa600ad69567a7089a57adb2 Reviewed-on: https://go-review.googlesource.com/20648 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
edde955d7f
commit
2dcbbbd193
@ -44,14 +44,6 @@ func nilRegisterNumber(name string, n int16) (int16, bool) {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
var Pseudos = map[string]obj.As{
|
||||
"DATA": obj.ADATA,
|
||||
"FUNCDATA": obj.AFUNCDATA,
|
||||
"GLOBL": obj.AGLOBL,
|
||||
"PCDATA": obj.APCDATA,
|
||||
"TEXT": obj.ATEXT,
|
||||
}
|
||||
|
||||
// Set configures the architecture specified by GOARCH and returns its representation.
|
||||
// It returns nil if GOARCH is not recognized.
|
||||
func Set(GOARCH string) *Arch {
|
||||
|
@ -183,12 +183,10 @@ func (p *Parser) line() bool {
|
||||
p.errorf("missing operand")
|
||||
}
|
||||
}
|
||||
i, present := arch.Pseudos[word]
|
||||
if present {
|
||||
p.pseudo(i, word, operands)
|
||||
if p.pseudo(word, operands) {
|
||||
return true
|
||||
}
|
||||
i, present = p.arch.Instructions[word]
|
||||
i, present := p.arch.Instructions[word]
|
||||
if present {
|
||||
p.instruction(i, word, cond, operands)
|
||||
return true
|
||||
@ -214,21 +212,22 @@ func (p *Parser) instruction(op obj.As, word, cond string, operands [][]lex.Toke
|
||||
p.asmInstruction(op, cond, p.addr)
|
||||
}
|
||||
|
||||
func (p *Parser) pseudo(op obj.As, word string, operands [][]lex.Token) {
|
||||
switch op {
|
||||
case obj.ATEXT:
|
||||
p.asmText(word, operands)
|
||||
case obj.ADATA:
|
||||
func (p *Parser) pseudo(word string, operands [][]lex.Token) bool {
|
||||
switch word {
|
||||
case "DATA":
|
||||
p.asmData(word, operands)
|
||||
case obj.AGLOBL:
|
||||
p.asmGlobl(word, operands)
|
||||
case obj.APCDATA:
|
||||
p.asmPCData(word, operands)
|
||||
case obj.AFUNCDATA:
|
||||
case "FUNCDATA":
|
||||
p.asmFuncData(word, operands)
|
||||
case "GLOBL":
|
||||
p.asmGlobl(word, operands)
|
||||
case "PCDATA":
|
||||
p.asmPCData(word, operands)
|
||||
case "TEXT":
|
||||
p.asmText(word, operands)
|
||||
default:
|
||||
p.errorf("unimplemented: %s", word)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *Parser) start(operand []lex.Token) {
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"cmd/asm/internal/arch"
|
||||
"cmd/asm/internal/lex"
|
||||
)
|
||||
|
||||
@ -58,11 +57,9 @@ func TestErroneous(t *testing.T) {
|
||||
parser.errorCount = 0
|
||||
parser.lineNum++
|
||||
parser.histLineNum++
|
||||
op, ok := arch.Pseudos[test.pseudo]
|
||||
if !ok {
|
||||
if !parser.pseudo(test.pseudo, tokenize(test.operands)) {
|
||||
t.Fatalf("Wrong pseudo-instruction: %s", test.pseudo)
|
||||
}
|
||||
parser.pseudo(op, test.pseudo, tokenize(test.operands))
|
||||
errorLine := buf.String()
|
||||
if test.expected != errorLine {
|
||||
t.Errorf("Unexpected error %q; expected %q", errorLine, test.expected)
|
||||
|
@ -266,7 +266,6 @@ const (
|
||||
AXXX As = iota
|
||||
ACALL
|
||||
ACHECKNIL
|
||||
ADATA // used only by the assembler for parsing
|
||||
ADUFFCOPY
|
||||
ADUFFZERO
|
||||
AEND
|
||||
|
@ -603,7 +603,6 @@ var Anames = []string{
|
||||
"XXX",
|
||||
"CALL",
|
||||
"CHECKNIL",
|
||||
"DATA",
|
||||
"DUFFCOPY",
|
||||
"DUFFZERO",
|
||||
"END",
|
||||
|
Loading…
Reference in New Issue
Block a user