Made native target actually work
This commit is contained in:
parent
6b2ed12c90
commit
635add38e6
@ -11,6 +11,7 @@ import "git.tebibyte.media/sashakoshka/fspl/llvm"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/parser"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/analyzer"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator/native"
|
||||
|
||||
type Compiler struct {
|
||||
Output string
|
||||
@ -51,7 +52,7 @@ func (this *Compiler) Compile (inputs []string) error {
|
||||
err := semanticTree.Analyze(syntaxTree)
|
||||
if err != nil { return err }
|
||||
|
||||
module, err := generator.NativeTarget().Generate(semanticTree)
|
||||
module, err := native.NativeTarget().Generate(semanticTree)
|
||||
if err != nil { return err }
|
||||
|
||||
if this.Output == "" {
|
||||
|
@ -16,15 +16,6 @@ type Target struct {
|
||||
Arch string
|
||||
}
|
||||
|
||||
// NativeTarget returns a target describing the current system.
|
||||
func NativeTarget () Target {
|
||||
// FIXME
|
||||
return Target {
|
||||
WordSize: 64,
|
||||
Arch: "x86",
|
||||
}
|
||||
}
|
||||
|
||||
type generator struct {
|
||||
target Target
|
||||
tree analyzer.Tree
|
||||
|
8
generator/native/native.go
Normal file
8
generator/native/native.go
Normal file
@ -0,0 +1,8 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
// NativeTarget returns a target describing the current system.
|
||||
func NativeTarget () Target {
|
||||
return nativeTarget()
|
||||
}
|
10
generator/native/native_386.go
Normal file
10
generator/native/native_386.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "i386",
|
||||
}
|
||||
}
|
10
generator/native/native_amd64.go
Normal file
10
generator/native/native_amd64.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "x86_64",
|
||||
}
|
||||
}
|
11
generator/native/native_amd64p32.go
Normal file
11
generator/native/native_amd64p32.go
Normal file
@ -0,0 +1,11 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
// this may not be accurate, can't find info online about amd64p32
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "x86",
|
||||
}
|
||||
}
|
10
generator/native/native_arm.go
Normal file
10
generator/native/native_arm.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "arm",
|
||||
}
|
||||
}
|
10
generator/native/native_arm64.go
Normal file
10
generator/native/native_arm64.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "aarch64",
|
||||
}
|
||||
}
|
10
generator/native/native_arm64be.go
Normal file
10
generator/native/native_arm64be.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "aarch64_be",
|
||||
}
|
||||
}
|
10
generator/native/native_armbe.go
Normal file
10
generator/native/native_armbe.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "armeb",
|
||||
}
|
||||
}
|
10
generator/native/native_mips.go
Normal file
10
generator/native/native_mips.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "mips",
|
||||
}
|
||||
}
|
10
generator/native/native_mips64.go
Normal file
10
generator/native/native_mips64.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "mips64",
|
||||
}
|
||||
}
|
10
generator/native/native_mips64le.go
Normal file
10
generator/native/native_mips64le.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "mips64el",
|
||||
}
|
||||
}
|
10
generator/native/native_mipsle.go
Normal file
10
generator/native/native_mipsle.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "mipsel",
|
||||
}
|
||||
}
|
10
generator/native/native_ppc.go
Normal file
10
generator/native/native_ppc.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "ppc32",
|
||||
}
|
||||
}
|
10
generator/native/native_ppc64.go
Normal file
10
generator/native/native_ppc64.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "ppc64",
|
||||
}
|
||||
}
|
10
generator/native/native_ppc64le.go
Normal file
10
generator/native/native_ppc64le.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "ppc64le",
|
||||
}
|
||||
}
|
10
generator/native/native_riscv.go
Normal file
10
generator/native/native_riscv.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "riscv32",
|
||||
}
|
||||
}
|
10
generator/native/native_sparc.go
Normal file
10
generator/native/native_sparc.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 32,
|
||||
Arch: "sparc",
|
||||
}
|
||||
}
|
10
generator/native/native_sparc64.go
Normal file
10
generator/native/native_sparc64.go
Normal file
@ -0,0 +1,10 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "sparcv9",
|
||||
}
|
||||
}
|
12
generator/native/native_wasm.go
Normal file
12
generator/native/native_wasm.go
Normal file
@ -0,0 +1,12 @@
|
||||
package native
|
||||
|
||||
import "git.tebibyte.media/sashakoshka/fspl/generator"
|
||||
|
||||
func nativeTarget () generator.Target {
|
||||
// FIXME: golang doesn't discern between 32/64 bit wasm so we assume 64
|
||||
// bit here
|
||||
return generator.Target {
|
||||
WordSize: 64,
|
||||
Arch: "wasm64",
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package generator
|
||||
|
||||
import "fmt"
|
||||
import "errors"
|
||||
import "strings"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/llvm"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/entity"
|
||||
|
||||
@ -69,7 +70,7 @@ func (this *generator) generateTypeFloat (ty *entity.TypeFloat) (llvm.Type, erro
|
||||
case 32: kind = llvm.FloatKindFloat
|
||||
case 64: kind = llvm.FloatKindDouble
|
||||
case 80:
|
||||
if this.target.Arch == "x86" {
|
||||
if strings.HasPrefix(this.target.Arch, "x86") {
|
||||
kind = llvm.FloatKindX86_FP80
|
||||
} else {
|
||||
return nil, errors.New(fmt.Sprintln (
|
||||
@ -77,7 +78,7 @@ func (this *generator) generateTypeFloat (ty *entity.TypeFloat) (llvm.Type, erro
|
||||
this.target.Arch))
|
||||
}
|
||||
case 128:
|
||||
if this.target.Arch == "PowerPC" {
|
||||
if strings.HasPrefix(this.target.Arch, "ppc") {
|
||||
kind = llvm.FloatKindPPC_FP128
|
||||
} else {
|
||||
kind = llvm.FloatKindFP128
|
||||
|
Loading…
x
Reference in New Issue
Block a user