src/runtime/sys_darwin_386.s | 5 +++++ src/runtime/sys_darwin_amd64.s | 7 ++++++- diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s index ad3dca444a830cf0028b07473e1cb7b80bf8eeb1..430e86d1c094de9b7a429b884276fbdc63af83a6 100644 --- a/src/runtime/sys_darwin_386.s +++ b/src/runtime/sys_darwin_386.s @@ -201,6 +201,11 @@ MOVL AX, 4(SP) MOVL $0, 8(SP) // time zone pointer MOVL $116, AX INT $0x80 + CMPL AX, $0 + JNE inreg + MOVL 12(SP), AX + MOVL 16(SP), DX +inreg: // sec is in AX, usec in DX // convert to DX:AX nsec MOVL DX, BX diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s index 7b9cf6a3bcdc2570b38d2444a93fa5a898d8daf0..e09b906ba571f227308773ac40c87e6e0ec603f7 100644 --- a/src/runtime/sys_darwin_amd64.s +++ b/src/runtime/sys_darwin_amd64.s @@ -155,10 +155,15 @@ RET systime: // Fall back to system call (usually first call in this thread). - MOVQ SP, DI // must be non-nil, unused + MOVQ SP, DI MOVQ $0, SI MOVL $(0x2000000+116), AX SYSCALL + CMPQ AX, $0 + JNE inreg + MOVQ 0(SP), AX + MOVL 8(SP), DX +inreg: // sec is in AX, usec in DX // return nsec in AX IMULQ $1000000000, AX