mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
First draft of converted Go compiler, using rsc.io/c2go rev 83d795a. Change-Id: I29f4c7010de07d2ff1947bbca9865879d83c32c3 Reviewed-on: https://go-review.googlesource.com/4851 Reviewed-by: Rob Pike <r@golang.org>
147 lines
1.9 KiB
Go
147 lines
1.9 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package obj
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// go-specific code shared across loaders (5l, 6l, 8l).
|
|
|
|
var Framepointer_enabled int
|
|
|
|
var Fieldtrack_enabled int
|
|
|
|
var Zprog Prog
|
|
|
|
// Toolchain experiments.
|
|
// These are controlled by the GOEXPERIMENT environment
|
|
// variable recorded when the toolchain is built.
|
|
// This list is also known to cmd/gc.
|
|
var exper = []struct {
|
|
name string
|
|
val *int
|
|
}{
|
|
struct {
|
|
name string
|
|
val *int
|
|
}{"fieldtrack", &Fieldtrack_enabled},
|
|
struct {
|
|
name string
|
|
val *int
|
|
}{"framepointer", &Framepointer_enabled},
|
|
}
|
|
|
|
func addexp(s string) {
|
|
var i int
|
|
|
|
for i = 0; i < len(exper); i++ {
|
|
if exper[i].name == s {
|
|
if exper[i].val != nil {
|
|
*exper[i].val = 1
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
fmt.Printf("unknown experiment %s\n", s)
|
|
os.Exit(2)
|
|
}
|
|
|
|
func linksetexp() {
|
|
for _, f := range strings.Split(goexperiment, ",") {
|
|
if f != "" {
|
|
addexp(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
// replace all "". with pkg.
|
|
func Expandpkg(t0 string, pkg string) string {
|
|
return strings.Replace(t0, `"".`, pkg+".", -1)
|
|
}
|
|
|
|
func double2ieee(ieee *uint64, f float64) {
|
|
*ieee = math.Float64bits(f)
|
|
}
|
|
|
|
func Nopout(p *Prog) {
|
|
p.As = ANOP
|
|
p.Scond = Zprog.Scond
|
|
p.From = Zprog.From
|
|
p.From3 = Zprog.From3
|
|
p.Reg = Zprog.Reg
|
|
p.To = Zprog.To
|
|
}
|
|
|
|
func Nocache(p *Prog) {
|
|
p.Optab = 0
|
|
p.From.Class = 0
|
|
p.From3.Class = 0
|
|
p.To.Class = 0
|
|
}
|
|
|
|
/*
|
|
* bv.c
|
|
*/
|
|
|
|
/*
|
|
* closure.c
|
|
*/
|
|
|
|
/*
|
|
* const.c
|
|
*/
|
|
|
|
/*
|
|
* cplx.c
|
|
*/
|
|
|
|
/*
|
|
* dcl.c
|
|
*/
|
|
|
|
/*
|
|
* esc.c
|
|
*/
|
|
|
|
/*
|
|
* export.c
|
|
*/
|
|
|
|
/*
|
|
* fmt.c
|
|
*/
|
|
|
|
/*
|
|
* gen.c
|
|
*/
|
|
|
|
/*
|
|
* init.c
|
|
*/
|
|
|
|
/*
|
|
* inl.c
|
|
*/
|
|
|
|
/*
|
|
* lex.c
|
|
*/
|
|
func Expstring() string {
|
|
buf := "X"
|
|
for i := range exper {
|
|
if *exper[i].val != 0 {
|
|
buf += "," + exper[i].name
|
|
}
|
|
}
|
|
if buf == "X" {
|
|
buf += ",none"
|
|
}
|
|
return "X:" + buf[2:]
|
|
}
|