github.com/icexin/eggos@v0.4.2-0.20220216025428-78b167e4f349/kernel/sys/sys_amd64.s (about)

     1  #include "textflag.h"
     2  
     3  // Outb(port uint16, data byte)
     4  TEXT ·Outb(SB), NOSPLIT, $0-3
     5  	MOVW port+0(FP), DX
     6  	MOVB data+2(FP), AX
     7  	OUTB
     8  	RET
     9  
    10  // byte Inb(port uint16)
    11  TEXT ·Inb(SB), NOSPLIT, $0-9
    12  	MOVW port+0(FP), DX
    13  	XORW AX, AX
    14  	INB
    15  	MOVB AX, ret+8(FP)
    16  	RET
    17  
    18  // Outl(port uint16, data uint32)
    19  TEXT ·Outl(SB), NOSPLIT, $0-8
    20  	MOVW port+0(FP), DX
    21  	MOVL data+4(FP), AX
    22  	OUTL
    23  	RET
    24  
    25  // uint32 Inl(port uint16)
    26  TEXT ·Inl(SB), NOSPLIT, $0-12
    27  	MOVW port+0(FP), DX
    28  	INL
    29  	MOVL AX, ret+8(FP)
    30  	RET
    31  
    32  // SetAX(val uint64)
    33  TEXT ·SetAX(SB), NOSPLIT, $0-8
    34  	MOVQ val+0(FP), AX
    35  	RET
    36  
    37  // uint64 Flags()
    38  TEXT ·Flags(SB), NOSPLIT, $0-8
    39  	PUSHFQ
    40  	POPQ AX
    41  	MOVQ AX, ret+0(FP)
    42  	RET
    43  
    44  // uint64 Cr2()
    45  TEXT ·Cr2(SB), NOSPLIT, $0-8
    46  	MOVQ CR2, AX
    47  	MOVQ AX, ret+0(FP)
    48  	RET
    49  
    50  // uint64 CS()
    51  TEXT ·CS(SB), NOSPLIT, $0-8
    52  	XORQ AX, AX
    53  	MOVW CS, AX
    54  	MOVQ AX, ret+0(FP)
    55  	RET
    56  
    57  // Fxsave(addr uint64)
    58  TEXT ·Fxsave(SB), NOSPLIT, $0-8
    59  	MOVQ   addr+0(FP), AX
    60  	FXSAVE (AX)
    61  	RET