update implementation of k10mwait. consider renaming monmwait, and getting rid of pipefitting in port. Reference: /n/atom/patch/applied2013/nixmonupd Date: Sat Sep 14 22:14:46 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/l64v.s Sat Sep 14 22:14:16 2013 +++ /sys/src/nix/k10/l64v.s Sat Sep 14 22:14:18 2013 @@ -363,40 +363,34 @@ HLT RET -TEXT _monitor(SB), 1, $-4 /* void monitor(void*); */ - MOVQ RARG, AX /* linear address to monitor */ - XORQ CX, CX /* no optional extensions yet */ - XORQ DX, DX /* no optional hints yet */ - BYTE $0x0f; BYTE $0x01; BYTE $0xc8 /* MONITOR */ - RET +#define MONITOR BYTE $0x0f; BYTE $0x01; BYTE $0xc8 +#define MWAIT BYTE $0x0f; BYTE $0x01; BYTE $0xc9 -TEXT _mwait(SB), 1, $-4 /* void mwait(u32int); */ - MOVLQZX RARG, CX /* optional extensions */ - BYTE $0x0f; BYTE $0x01; BYTE $0xc9 /* MWAIT */ - RET +/* + * uintptr monmwait(void*, uintptr) + */ +TEXT k10mwait(SB),1,$16 + MOVQ val+8(FP), BX + +_mmstart: + CMPQ (BP), BX /* changed yet? */ + JNE _mmdone -TEXT k10mwait+0(SB),0,$16 -k10mwloop: - MOVQ RARG, CX - MOVQ val+8(FP), DX - MOVQ (CX), AX - CMPQ AX, DX - JNE k10mwdone - MOVQ RARG, AX /* linear address to monitor */ - XORQ CX, CX /* no optional extensions yet */ - XORQ DX, DX /* no optional hints yet */ - BYTE $0x0f; BYTE $0x01; BYTE $0xc8 /* MONITOR */ - MOVQ RARG, CX - MOVQ (CX),AX - MOVQ val+8(FP), DX - CMPQ AX, DX - JNE k10mwdone - XORQ DX, DX - XORQ CX, CX /* optional extensions */ - BYTE $0x0f; BYTE $0x01; BYTE $0xc9 /* MWAIT */ - JMP k10mwloop -k10mwdone: - RET , + MOVQ BP, AX /* linear address to monitor */ + XORQ CX, CX /* extensions */ + XORQ DX, DX /* hints */ + MONITOR + + CMPQ (BP), BX /* changed yet? */ + JNE _mmdone + + /*XORQ CX, CX*/ /* extensions (different from monitor) */ + XORQ AX, AX /* hints */ + MWAIT + /* questionable: pop out on irq */ +_mmdone: + MOVQ (BP), AX + RET TEXT mul64fract(SB), 1, $-4 MOVQ a+8(FP), AX