From bbd1187a9c83eb3cf566078a0d6ae3fd1e9e9c85 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 20 May 2024 21:32:10 +0800 Subject: [PATCH] runtime: print/println --- c/c.go | 6 + internal/runtime/llgo_autogen.lla | Bin 7276 -> 5662 bytes internal/runtime/print.go | 176 ------------------------------ internal/runtime/z_print.go | 71 ++++++++++++ 4 files changed, 77 insertions(+), 176 deletions(-) delete mode 100644 internal/runtime/print.go create mode 100644 internal/runtime/z_print.go diff --git a/c/c.go b/c/c.go index fcff0826..f035ff48 100644 --- a/c/c.go +++ b/c/c.go @@ -109,6 +109,12 @@ func Printf(format *Char, __llgo_va_list ...any) Int //go:linkname Fprintf C.fprintf func Fprintf(fp FilePtr, format *Char, __llgo_va_list ...any) Int +//go:linkname Fwrite C.fwrite +func Fwrite(data Pointer, size, count uintptr, fp FilePtr) uintptr + +//go:linkname Fputc C.fputc +func Fputc(c Int, fp FilePtr) Int + // ----------------------------------------------------------------------------- //go:linkname Time C.time diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index e6491d05239605f440f78763c6ea6f04e49fbf17..61566d860b8ded0e710d840169f70397efa2c8c8 100644 GIT binary patch literal 5662 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 literal 7276 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 0: - PrintString("+Inf") - return - case v+v == v && v < 0: - PrintString("-Inf") - return - } - - const n = 7 // digits printed - var buf [n + 7]byte - buf[0] = '+' - e := 0 // exp - if v == 0 { - if 1/v < 0 { - buf[0] = '-' - } - } else { - if v < 0 { - v = -v - buf[0] = '-' - } - - // normalize - for v >= 10 { - e++ - v /= 10 - } - for v < 1 { - e-- - v *= 10 - } - - // round - h := 5.0 - for i := 0; i < n; i++ { - h /= 10 - } - v += h - if v >= 10 { - e++ - v /= 10 - } - } - - // format +d.dddd+edd - for i := 0; i < n; i++ { - s := int(v) - buf[i+2] = byte(s + '0') - v -= float64(s) - v *= 10 - } - buf[1] = buf[2] - buf[2] = '.' - - buf[n+2] = 'e' - buf[n+3] = '+' - if e < 0 { - e = -e - buf[n+3] = '-' - } - - buf[n+4] = byte(e/100) + '0' - buf[n+5] = byte(e/10)%10 + '0' - buf[n+6] = byte(e%10) + '0' - gwrite(buf[:]) -} - -// func PrintComplex(c complex128) { -// print("(", real(c), imag(c), "i)") -// } - -func PrintUint(v uint64) { - var buf [100]byte - i := len(buf) - for i--; i > 0; i-- { - buf[i] = byte(v%10 + '0') - if v < 10 { - break - } - v /= 10 - } - gwrite(buf[i:]) -} - -func PrintInt(v int64) { - if v < 0 { - PrintString("-") - v = -v - } - PrintUint(uint64(v)) -} - -func PrintHex(v uint64) { - const dig = "0123456789abcdef" - var buf [100]byte - i := len(buf) - for i--; i > 0; i-- { - buf[i] = dig[v%16] - if v < 16 && len(buf)-i >= 0 { - break - } - v /= 16 - } - i-- - buf[i] = 'x' - i-- - buf[i] = '0' - gwrite(buf[i:]) -} - -func PrintPointer(p unsafe.Pointer) { - PrintHex(uint64(uintptr(p))) -} - -func PrintString(s string) { - gwrite(bytes(s)) -} - -func PrintSlice(s Slice) { - sp := (*Slice)(unsafe.Pointer(&s)) - print("[", s.len, "/", s.cap, "]") - PrintPointer(sp.data) -} - -func PrintIface(i iface) { - print("(", i.tab, ",", i.data, ")") -} diff --git a/internal/runtime/z_print.go b/internal/runtime/z_print.go new file mode 100644 index 00000000..2bb01541 --- /dev/null +++ b/internal/runtime/z_print.go @@ -0,0 +1,71 @@ +// 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 runtime + +import ( + "unsafe" + + "github.com/goplus/llgo/c" +) + +func PrintByte(v byte) { + c.Fputc(c.Int(v), c.Stderr) +} + +func PrintBool(v bool) { + if v { + c.Fprintf(c.Stderr, c.Str("true")) + } else { + c.Fprintf(c.Stderr, c.Str("false")) + } +} + +func PrintFloat(v float64) { + switch { // TODO(xsw): does c.Fprintf support these special cases? + case v != v: + c.Fprintf(c.Stderr, c.Str("NaN")) + return + case v+v == v: + if v > 0 { + c.Fprintf(c.Stderr, c.Str("+Inf")) + } else if v < 0 { + c.Fprintf(c.Stderr, c.Str("-Inf")) + } + return + } + c.Fprintf(c.Stderr, c.Str("%g"), v) +} + +// func PrintComplex(c complex128) { +// print("(", real(c), imag(c), "i)") +// } + +func PrintUint(v uint64) { + c.Fprintf(c.Stderr, c.Str("%llu"), v) +} + +func PrintInt(v int64) { + c.Fprintf(c.Stderr, c.Str("%lld"), v) +} + +func PrintHex(v uint64) { + c.Fprintf(c.Stderr, c.Str("%llx"), v) +} + +func PrintPointer(p unsafe.Pointer) { + c.Fprintf(c.Stderr, c.Str("%p"), p) +} + +func PrintString(s String) { + c.Fwrite(s.data, 1, uintptr(s.len), c.Stderr) +} + +func PrintSlice(s Slice) { + print("[", s.len, "/", s.cap, "]", s.data) +} + +func PrintIface(i Interface) { + print("(", i.tab, ",", i.data, ")") +}