feat(asm): the segment-absolute and crash-store forms GOROOT writes
Test / test (push) Failing after 2m28s
Test / test (push) Failing after 2m28s
Assisted-by: GLM 5.3 Flash
This commit is contained in:
@@ -684,6 +684,26 @@ func parseAddress(g []token.Token) ast.Address {
|
||||
if i > 0 && i < len(g) {
|
||||
addr.Shift = joinRaw(g[i:])
|
||||
}
|
||||
// A lone (possibly signed) number is an absolute address: MOVL $0xf1,
|
||||
// 0xf1 stores through the bare displacement with no base at all. In
|
||||
// operand position a number without $ is an address, never a value.
|
||||
if addr.Sym == nil && addr.Base == "" && addr.Index == "" && !addr.HasOff {
|
||||
neg := false
|
||||
j := 0
|
||||
if j < len(g) && (g[j].Kind == token.Minus || g[j].Kind == token.Plus) {
|
||||
neg = g[j].Kind == token.Minus
|
||||
j++
|
||||
}
|
||||
if j == len(g)-1 && g[j].Kind == token.Number {
|
||||
v := parseInt(g[j].Text)
|
||||
if neg {
|
||||
v = -v
|
||||
}
|
||||
addr.Offset = v
|
||||
addr.HasOff = true
|
||||
return addr
|
||||
}
|
||||
}
|
||||
return addr
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user