Made native target actually work

This commit is contained in:
Sasha Koshka 2023-11-30 17:16:55 -05:00
parent 6b2ed12c90
commit 635add38e6
22 changed files with 196 additions and 12 deletions

View File

@ -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 == "" {

View File

@ -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

View 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()
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View 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",
}
}

View File

@ -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