diff -U3 -r a/go/src/runtime/sys_darwin_386.s b/go/src/runtime/sys_darwin_386.s --- src/runtime/sys_darwin_386.s 2015-09-23 05:37:37.000000000 +0100 +++ src/runtime/sys_darwin_386.s 2016-09-18 15:50:43.000000000 +0100 @@ -182,11 +182,17 @@ systime: // Fall back to system call (usually first call in this thread) - LEAL 12(SP), AX // must be non-nil, unused + LEAL 16(SP), AX // must be non-nil, unused MOVL AX, 4(SP) MOVL $0, 8(SP) // time zone pointer + MOVL $0, 12(SP) // required as of Sierra; Issue 16570 MOVL $116, AX INT $0x80 + CMPL AX, $0 + JNE inreg + MOVL 16(SP), AX + MOVL 20(SP), DX +inreg: // sec is in AX, usec in DX // convert to DX:AX nsec MOVL DX, BX diff -U3 -r a/go/src/runtime/sys_darwin_amd64.s b/go/src/runtime/sys_darwin_amd64.s --- src/runtime/sys_darwin_amd64.s 2015-09-23 05:37:37.000000000 +0100 +++ src/runtime/sys_darwin_amd64.s 2016-09-18 15:50:41.000000000 +0100 @@ -141,10 +141,16 @@ 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 + MOVQ $0, DX // required as of Sierra; Issue 16570 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