github.com/miolini/go@v0.0.0-20160405192216-fca68c8cb408/src/cmd/compile/internal/amd64/galign.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package amd64 6 7 import ( 8 "cmd/compile/internal/gc" 9 "cmd/internal/obj" 10 "cmd/internal/obj/x86" 11 ) 12 13 var ( 14 addptr = x86.AADDQ 15 movptr = x86.AMOVQ 16 leaptr = x86.ALEAQ 17 cmpptr = x86.ACMPQ 18 ) 19 20 func betypeinit() { 21 gc.Widthptr = 8 22 gc.Widthint = 8 23 gc.Widthreg = 8 24 if obj.Getgoarch() == "amd64p32" { 25 gc.Widthptr = 4 26 gc.Widthint = 4 27 addptr = x86.AADDL 28 movptr = x86.AMOVL 29 leaptr = x86.ALEAL 30 cmpptr = x86.ACMPL 31 } 32 33 if gc.Ctxt.Flag_dynlink { 34 gc.Thearch.ReservedRegs = append(gc.Thearch.ReservedRegs, x86.REG_R15) 35 } 36 } 37 38 func Main() { 39 if obj.Getgoos() == "nacl" { 40 resvd = append(resvd, x86.REG_BP, x86.REG_R15) 41 } else if obj.Framepointer_enabled != 0 { 42 resvd = append(resvd, x86.REG_BP) 43 } 44 45 gc.Thearch.Thechar = '6' 46 gc.Thearch.Thestring = "amd64" 47 gc.Thearch.Thelinkarch = &x86.Linkamd64 48 if obj.Getgoarch() == "amd64p32" { 49 gc.Thearch.Thestring = "amd64p32" 50 gc.Thearch.Thelinkarch = &x86.Linkamd64p32 51 } 52 gc.Thearch.REGSP = x86.REGSP 53 gc.Thearch.REGCTXT = x86.REGCTXT 54 gc.Thearch.REGCALLX = x86.REG_BX 55 gc.Thearch.REGCALLX2 = x86.REG_AX 56 gc.Thearch.REGRETURN = x86.REG_AX 57 gc.Thearch.REGMIN = x86.REG_AX 58 gc.Thearch.REGMAX = x86.REG_R15 59 gc.Thearch.FREGMIN = x86.REG_X0 60 gc.Thearch.FREGMAX = x86.REG_X15 61 gc.Thearch.MAXWIDTH = 1 << 50 62 gc.Thearch.ReservedRegs = resvd 63 64 gc.Thearch.AddIndex = addindex 65 gc.Thearch.Betypeinit = betypeinit 66 gc.Thearch.Cgen_bmul = cgen_bmul 67 gc.Thearch.Cgen_hmul = cgen_hmul 68 gc.Thearch.Cgen_shift = cgen_shift 69 gc.Thearch.Clearfat = clearfat 70 gc.Thearch.Defframe = defframe 71 gc.Thearch.Dodiv = dodiv 72 gc.Thearch.Excise = excise 73 gc.Thearch.Expandchecks = expandchecks 74 gc.Thearch.Getg = getg 75 gc.Thearch.Gins = gins 76 gc.Thearch.Ginsboolval = ginsboolval 77 gc.Thearch.Ginscmp = ginscmp 78 gc.Thearch.Ginscon = ginscon 79 gc.Thearch.Ginsnop = ginsnop 80 gc.Thearch.Gmove = gmove 81 gc.Thearch.Peep = peep 82 gc.Thearch.Proginfo = proginfo 83 gc.Thearch.Regtyp = regtyp 84 gc.Thearch.Sameaddr = sameaddr 85 gc.Thearch.Smallindir = smallindir 86 gc.Thearch.Stackaddr = stackaddr 87 gc.Thearch.Blockcopy = blockcopy 88 gc.Thearch.Sudoaddable = sudoaddable 89 gc.Thearch.Sudoclean = sudoclean 90 gc.Thearch.Excludedregs = excludedregs 91 gc.Thearch.RtoB = RtoB 92 gc.Thearch.FtoB = FtoB 93 gc.Thearch.BtoR = BtoR 94 gc.Thearch.BtoF = BtoF 95 gc.Thearch.Optoas = optoas 96 gc.Thearch.Doregbits = doregbits 97 gc.Thearch.Regnames = regnames 98 99 gc.Thearch.SSARegToReg = ssaRegToReg 100 gc.Thearch.SSAMarkMoves = ssaMarkMoves 101 gc.Thearch.SSAGenValue = ssaGenValue 102 gc.Thearch.SSAGenBlock = ssaGenBlock 103 104 gc.Main() 105 gc.Exit(0) 106 }