// System, string-primitive and x87 families: flag register moves, the // serialising instructions, MOVS/STOS, the MXCSR pair, scalar float-to-int // conversions and FMOVD. Every result is folded back so no instruction is // dead. #include "textflag.h" // func system(x uint64) uint64 TEXT ·system(SB), NOSPLIT, $0-16 MOVQ x+0(FP), AX PUSHFQ POPFQ CPUID RDTSC RDTSCP SYSCALL XGETBV PAUSE LFENCE MFENCE SFENCE UNDEF XORQ AX, BX MOVQ BX, ret+8(FP) RET // func stringprim(p *byte, n int) uint64 TEXT ·stringprim(SB), NOSPLIT, $0-24 MOVQ p+0(FP), DI MOVQ n+8(FP), CX LEAQ buf<>(SB), AX MOVQ AX, SI CLD MOVSB MOVSW MOVSL MOVSQ STOSB STOSQ STOSL STOSW MOVQ DI, ret+16(FP) RET DATA buf<>+0x00(SB)/8, $0 GLOBL buf<>(SB), NOPTR, $8 // func intgate(x uint64) uint64 TEXT ·intgate(SB), NOSPLIT, $0-16 MOVQ x+0(FP), AX INT $3 MOVQ AX, ret+8(FP) RET // func fpmxcsr(x float64, csr *uint32) int64 TEXT ·fpmxcsr(SB), NOSPLIT, $0-24 MOVQ x+0(FP), X0 MOVQ csr+8(FP), AX STMXCSR (AX) LDMXCSR (AX) CVTSD2SL X0, CX CVTTSD2SQ X0, DX MOVL (AX), SI MOVQ SI, ret+8(FP) RET // func fmove(p *float64) float64 TEXT ·fmove(SB), NOSPLIT, $0-16 MOVQ p+0(FP), AX FMOVD (AX), F0 FMOVD F0, F1 FMOVD F0, (AX) MOVQ (AX), AX MOVQ AX, ret+8(FP) RET