github.com/rsc/tmp@v0.0.0-20240517235954-6deaab19748b/bootstrap/bootstrap6g/galign.go (about) 1 // Do not edit. Bootstrap copy of /Users/rsc/g/go/src/cmd/6g/galign.go 2 3 // Copyright 2009 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 package main 8 9 import ( 10 "rsc.io/tmp/bootstrap/internal/gc" 11 "rsc.io/tmp/bootstrap/internal/obj" 12 "rsc.io/tmp/bootstrap/internal/obj/x86" 13 ) 14 15 var ( 16 thechar int = '6' 17 thestring string = "amd64" 18 thelinkarch *obj.LinkArch = &x86.Linkamd64 19 ) 20 21 func linkarchinit() { 22 if obj.Getgoarch() == "amd64p32" { 23 thelinkarch = &x86.Linkamd64p32 24 gc.Thearch.Thelinkarch = thelinkarch 25 thestring = "amd64p32" 26 gc.Thearch.Thestring = "amd64p32" 27 } 28 } 29 30 var MAXWIDTH int64 = 1 << 50 31 32 var ( 33 addptr int = x86.AADDQ 34 movptr int = x86.AMOVQ 35 leaptr int = x86.ALEAQ 36 cmpptr int = x86.ACMPQ 37 ) 38 39 /* 40 * go declares several platform-specific type aliases: 41 * int, uint, and uintptr 42 */ 43 var typedefs = []gc.Typedef{ 44 gc.Typedef{"int", gc.TINT, gc.TINT64}, 45 gc.Typedef{"uint", gc.TUINT, gc.TUINT64}, 46 gc.Typedef{"uintptr", gc.TUINTPTR, gc.TUINT64}, 47 } 48 49 func betypeinit() { 50 gc.Widthptr = 8 51 gc.Widthint = 8 52 gc.Widthreg = 8 53 if obj.Getgoarch() == "amd64p32" { 54 gc.Widthptr = 4 55 gc.Widthint = 4 56 addptr = x86.AADDL 57 movptr = x86.AMOVL 58 leaptr = x86.ALEAL 59 cmpptr = x86.ACMPL 60 typedefs[0].Sameas = gc.TINT32 61 typedefs[1].Sameas = gc.TUINT32 62 typedefs[2].Sameas = gc.TUINT32 63 } 64 65 if gc.Ctxt.Flag_dynlink { 66 gc.Thearch.ReservedRegs = append(gc.Thearch.ReservedRegs, x86.REG_R15) 67 } 68 } 69 70 func main() { 71 if obj.Getgoos() == "nacl" { 72 resvd = append(resvd, x86.REG_BP, x86.REG_R15) 73 } else if obj.Framepointer_enabled != 0 { 74 resvd = append(resvd, x86.REG_BP) 75 } 76 77 gc.Thearch.Thechar = thechar 78 gc.Thearch.Thestring = thestring 79 gc.Thearch.Thelinkarch = thelinkarch 80 gc.Thearch.Typedefs = typedefs 81 gc.Thearch.REGSP = x86.REGSP 82 gc.Thearch.REGCTXT = x86.REGCTXT 83 gc.Thearch.REGCALLX = x86.REG_BX 84 gc.Thearch.REGCALLX2 = x86.REG_AX 85 gc.Thearch.REGRETURN = x86.REG_AX 86 gc.Thearch.REGMIN = x86.REG_AX 87 gc.Thearch.REGMAX = x86.REG_R15 88 gc.Thearch.FREGMIN = x86.REG_X0 89 gc.Thearch.FREGMAX = x86.REG_X15 90 gc.Thearch.MAXWIDTH = MAXWIDTH 91 gc.Thearch.ReservedRegs = resvd 92 93 gc.Thearch.AddIndex = addindex 94 gc.Thearch.Betypeinit = betypeinit 95 gc.Thearch.Cgen_bmul = cgen_bmul 96 gc.Thearch.Cgen_hmul = cgen_hmul 97 gc.Thearch.Cgen_shift = cgen_shift 98 gc.Thearch.Clearfat = clearfat 99 gc.Thearch.Defframe = defframe 100 gc.Thearch.Dodiv = dodiv 101 gc.Thearch.Excise = excise 102 gc.Thearch.Expandchecks = expandchecks 103 gc.Thearch.Getg = getg 104 gc.Thearch.Gins = gins 105 gc.Thearch.Ginsboolval = ginsboolval 106 gc.Thearch.Ginscon = ginscon 107 gc.Thearch.Ginsnop = ginsnop 108 gc.Thearch.Gmove = gmove 109 gc.Thearch.Linkarchinit = linkarchinit 110 gc.Thearch.Peep = peep 111 gc.Thearch.Proginfo = proginfo 112 gc.Thearch.Regtyp = regtyp 113 gc.Thearch.Sameaddr = sameaddr 114 gc.Thearch.Smallindir = smallindir 115 gc.Thearch.Stackaddr = stackaddr 116 gc.Thearch.Stackcopy = stackcopy 117 gc.Thearch.Sudoaddable = sudoaddable 118 gc.Thearch.Sudoclean = sudoclean 119 gc.Thearch.Excludedregs = excludedregs 120 gc.Thearch.RtoB = RtoB 121 gc.Thearch.FtoB = FtoB 122 gc.Thearch.BtoR = BtoR 123 gc.Thearch.BtoF = BtoF 124 gc.Thearch.Optoas = optoas 125 gc.Thearch.Doregbits = doregbits 126 gc.Thearch.Regnames = regnames 127 128 gc.Main() 129 gc.RunAtExit() 130 }