github.com/rsc/go@v0.0.0-20150416155037-e040fd465409/src/cmd/8g/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 main 6 7 import ( 8 "cmd/internal/gc" 9 "cmd/internal/obj" 10 "cmd/internal/obj/x86" 11 ) 12 13 var thechar int = '8' 14 15 var thestring string = "386" 16 17 var thelinkarch *obj.LinkArch = &x86.Link386 18 19 func linkarchinit() { 20 } 21 22 var MAXWIDTH int64 = (1 << 32) - 1 23 24 /* 25 * go declares several platform-specific type aliases: 26 * int, uint, and uintptr 27 */ 28 var typedefs = []gc.Typedef{ 29 gc.Typedef{"int", gc.TINT, gc.TINT32}, 30 gc.Typedef{"uint", gc.TUINT, gc.TUINT32}, 31 gc.Typedef{"uintptr", gc.TUINTPTR, gc.TUINT32}, 32 } 33 34 func betypeinit() { 35 gc.Widthptr = 4 36 gc.Widthint = 4 37 gc.Widthreg = 4 38 } 39 40 func main() { 41 gc.Thearch.Thechar = thechar 42 gc.Thearch.Thestring = thestring 43 gc.Thearch.Thelinkarch = thelinkarch 44 gc.Thearch.Typedefs = typedefs 45 gc.Thearch.REGSP = x86.REGSP 46 gc.Thearch.REGCTXT = x86.REGCTXT 47 gc.Thearch.REGCALLX = x86.REG_BX 48 gc.Thearch.REGCALLX2 = x86.REG_AX 49 gc.Thearch.REGRETURN = x86.REG_AX 50 gc.Thearch.REGMIN = x86.REG_AX 51 gc.Thearch.REGMAX = x86.REG_DI 52 switch v := obj.Getgo386(); v { 53 case "387": 54 gc.Thearch.FREGMIN = x86.REG_F0 55 gc.Thearch.FREGMAX = x86.REG_F7 56 gc.Thearch.Use387 = true 57 case "sse2": 58 gc.Thearch.FREGMIN = x86.REG_X0 59 gc.Thearch.FREGMAX = x86.REG_X7 60 default: 61 gc.Fatal("unsupported setting GO386=%s", v) 62 } 63 gc.Thearch.MAXWIDTH = MAXWIDTH 64 gc.Thearch.ReservedRegs = resvd 65 66 gc.Thearch.Betypeinit = betypeinit 67 gc.Thearch.Bgen_float = bgen_float 68 gc.Thearch.Cgen64 = cgen64 69 gc.Thearch.Cgen_bmul = cgen_bmul 70 gc.Thearch.Cgen_float = cgen_float 71 gc.Thearch.Cgen_hmul = cgen_hmul 72 gc.Thearch.Cgen_shift = cgen_shift 73 gc.Thearch.Clearfat = clearfat 74 gc.Thearch.Cmp64 = cmp64 75 gc.Thearch.Defframe = defframe 76 gc.Thearch.Dodiv = cgen_div 77 gc.Thearch.Excise = excise 78 gc.Thearch.Expandchecks = expandchecks 79 gc.Thearch.Getg = getg 80 gc.Thearch.Gins = gins 81 gc.Thearch.Ginscon = ginscon 82 gc.Thearch.Ginsnop = ginsnop 83 gc.Thearch.Gmove = gmove 84 gc.Thearch.Igenindex = igenindex 85 gc.Thearch.Linkarchinit = linkarchinit 86 gc.Thearch.Peep = peep 87 gc.Thearch.Proginfo = proginfo 88 gc.Thearch.Regtyp = regtyp 89 gc.Thearch.Sameaddr = sameaddr 90 gc.Thearch.Smallindir = smallindir 91 gc.Thearch.Stackaddr = stackaddr 92 gc.Thearch.Stackcopy = stackcopy 93 gc.Thearch.Sudoaddable = sudoaddable 94 gc.Thearch.Sudoclean = sudoclean 95 gc.Thearch.Excludedregs = excludedregs 96 gc.Thearch.RtoB = RtoB 97 gc.Thearch.FtoB = FtoB 98 gc.Thearch.BtoR = BtoR 99 gc.Thearch.BtoF = BtoF 100 gc.Thearch.Optoas = optoas 101 gc.Thearch.Doregbits = doregbits 102 gc.Thearch.Regnames = regnames 103 104 gc.Main() 105 gc.Exit(0) 106 }