Commit 73c10dd9 authored by Russ Cox's avatar Russ Cox

386 library updates

R=r
DELTA=161  (153 added, 0 deleted, 8 changed)
OCL=29802
CL=29809
parent f1f970ad
...@@ -8,7 +8,13 @@ ...@@ -8,7 +8,13 @@
# tests. # tests.
# If files are named on the command line, use them instead of test*.go. # If files are named on the command line, use them instead of test*.go.
O=6 case "$GOARCH" in
amd64) O=6;;
arm) O=5;;
386) O=8;;
*) echo 'unknown $GOARCH' 1>&2
esac
GC=${GC:-${O}g} GC=${GC:-${O}g}
GL=${GL:-${O}l} GL=${GL:-${O}l}
export GC GL export GC GL
...@@ -43,7 +49,7 @@ x) ...@@ -43,7 +49,7 @@ x)
exit 1 exit 1
esac esac
ofiles=$(echo $gofiles | sed 's/\.go/.6/g') ofiles=$(echo $gofiles | sed 's/\.go/.'$O'/g')
files=$(echo $gofiles | sed 's/\.go//g') files=$(echo $gofiles | sed 's/\.go//g')
...@@ -60,7 +66,7 @@ do ...@@ -60,7 +66,7 @@ do
done done
# They all compile; now generate the code to call them. # They all compile; now generate the code to call them.
trap "rm -f _testmain.go _testmain.6" 0 1 2 3 14 15 trap "rm -f _testmain.go _testmain.$O" 0 1 2 3 14 15
{ {
# package spec # package spec
echo 'package main' echo 'package main'
......
// 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.
// func cas(val *int32, old, new int32) bool
// Atomically:
// if *val == old {
// *val = new;
// return true;
// }else
// return false;
TEXT sync·cas(SB), 7, $0
MOVL 4(SP), BX
MOVL 8(SP), AX
MOVL 12(SP), CX
LOCK
CMPXCHGL CX, 0(BX)
JZ ok
MOVL $0, 16(SP)
RET
ok:
MOVL $1, 16(SP)
RET
...@@ -48,10 +48,10 @@ O1=\ ...@@ -48,10 +48,10 @@ O1=\
O2=\ O2=\
errstr.$O\ errstr.$O\
syscall_$(GOOS)_$(GOARCH).$O\ zsyscall_$(GOOS)_$(GOARCH).$O\
O3=\ O3=\
zsyscall_$(GOOS)_$(GOARCH).$O\ syscall_$(GOOS)_$(GOARCH).$O\
O4=\ O4=\
syscall_$(GOOS).$O\ syscall_$(GOOS).$O\
...@@ -68,11 +68,11 @@ a1: $(O1) ...@@ -68,11 +68,11 @@ a1: $(O1)
rm -f $(O1) rm -f $(O1)
a2: $(O2) a2: $(O2)
$(AR) grc _obj$D/syscall.a errstr.$O syscall_$(GOOS)_$(GOARCH).$O $(AR) grc _obj$D/syscall.a errstr.$O zsyscall_$(GOOS)_$(GOARCH).$O
rm -f $(O2) rm -f $(O2)
a3: $(O3) a3: $(O3)
$(AR) grc _obj$D/syscall.a zsyscall_$(GOOS)_$(GOARCH).$O $(AR) grc _obj$D/syscall.a syscall_$(GOOS)_$(GOARCH).$O
rm -f $(O3) rm -f $(O3)
a4: $(O4) a4: $(O4)
......
// 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.
//
// System call support for 386, Darwin
//
// func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// Trap # in AX, args on stack above caller pc.
TEXT syscall·Syscall(SB),7,$0
CALL sys·entersyscall(SB)
MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number
LEAL 8(SP), SI
LEAL 4(SP), DI
CLD
MOVSL
MOVSL
MOVSL
INT $0x80
JAE ok
MOVL $-1, 20(SP) // r1
MOVL $-1, 24(SP) // r2
MOVL AX, 28(SP) // errno
CALL sys·exitsyscall(SB)
RET
ok:
MOVL AX, 20(SP) // r1
MOVL DX, 24(SP) // r2 ???
MOVL $0, 28(SP) // errno
CALL sys·exitsyscall(SB)
RET
TEXT syscall·Syscall6(SB),7,$0
CALL sys·entersyscall(SB)
MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number
LEAL 8(SP), SI
LEAL 4(SP), DI
CLD
MOVSL
MOVSL
MOVSL
MOVSL
MOVSL
MOVSL
INT $0x80
JAE ok
MOVL $-1, 32(SP) // r1
MOVL $-1, 36(SP) // r2
MOVL AX, 40(SP) // errno
CALL sys·exitsyscall(SB)
RET
ok6:
MOVL AX, 32(SP) // r1
MOVL DX, 36(SP) // r2 ???
MOVL $0, 40(SP) // errno
CALL sys·exitsyscall(SB)
RET
TEXT syscall·RawSyscall(SB),7,$0
MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number
LEAL 8(SP), SI
LEAL 4(SP), DI
CLD
MOVSL
MOVSL
MOVSL
INT $0x80
JAE ok1
MOVL $-1, 20(SP) // r1
MOVL $-1, 24(SP) // r2
MOVL AX, 28(SP) // errno
RET
ok1:
MOVL AX, 20(SP) // r1
MOVL DX, 24(SP) // r2 ???
MOVL $0, 28(SP) // errno
RET
// 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 syscall
import "syscall"
func TimespecToNsec(ts Timespec) int64 {
return int64(ts.Sec)*1e9 + int64(ts.Nsec);
}
func NsecToTimespec(nsec int64) (ts Timespec) {
ts.Sec = int32(nsec / 1e9);
ts.Nsec = int32(nsec % 1e9);
return;
}
func TimevalToNsec(tv Timeval) int64 {
return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3;
}
func NsecToTimeval(nsec int64) (tv Timeval) {
nsec += 999; // round up to microsecond
tv.Usec = int32(nsec%1e9 / 1e3);
tv.Sec = int32(nsec/1e9);
return;
}
//sys gettimeofday(tp *Timeval) (sec int64, usec int32, errno int)
func Gettimeofday(tv *Timeval) (errno int) {
// The tv passed to gettimeofday must be non-nil
// but is otherwise unused. The answers come back
// in the two registers.
sec, usec, err := gettimeofday(tv);
tv.Sec = int32(sec);
tv.Usec = int32(usec);
return err;
}
...@@ -26,3 +26,15 @@ func NsecToTimeval(nsec int64) (tv Timeval) { ...@@ -26,3 +26,15 @@ func NsecToTimeval(nsec int64) (tv Timeval) {
tv.Sec = int64(nsec/1e9); tv.Sec = int64(nsec/1e9);
return; return;
} }
//sys gettimeofday(tp *Timeval) (sec int64, usec int32, errno int)
func Gettimeofday(tv *Timeval) (errno int) {
// The tv passed to gettimeofday must be non-nil
// but is otherwise unused. The answers come back
// in the two registers.
sec, usec, err := gettimeofday(tv);
tv.Sec = sec;
tv.Usec = usec;
return err;
}
// 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.
// Nothing to see here.
...@@ -212,7 +212,7 @@ gc(int32 force) ...@@ -212,7 +212,7 @@ gc(int32 force)
else else
gcpercent = atoi(p); gcpercent = atoi(p);
} }
if(gcpercent < 0) if(gcpercent < 0 || sizeof(void*) == 4) // TODO(rsc): broken on 32-bit right now
return; return;
semacquire(&gcsema); semacquire(&gcsema);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment