...

Text file src/github.com/klauspost/compress/zstd/fse_decoder_amd64.s

Documentation: github.com/klauspost/compress/zstd

     1// Code generated by command: go run gen_fse.go -out ../fse_decoder_amd64.s -pkg=zstd. DO NOT EDIT.
     2
     3//go:build !appengine && !noasm && gc && !noasm
     4
     5// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int
     6TEXT ·buildDtable_asm(SB), $0-24
     7	MOVQ ctx+8(FP), CX
     8	MOVQ s+0(FP), DI
     9
    10	// Load values
    11	MOVBQZX 4098(DI), DX
    12	XORQ    AX, AX
    13	BTSQ    DX, AX
    14	MOVQ    (CX), BX
    15	MOVQ    16(CX), SI
    16	LEAQ    -1(AX), R8
    17	MOVQ    8(CX), CX
    18	MOVWQZX 4096(DI), DI
    19
    20	// End load values
    21	// Init, lay down lowprob symbols
    22	XORQ R9, R9
    23	JMP  init_main_loop_condition
    24
    25init_main_loop:
    26	MOVWQSX (CX)(R9*2), R10
    27	CMPW    R10, $-1
    28	JNE     do_not_update_high_threshold
    29	MOVB    R9, 1(SI)(R8*8)
    30	DECQ    R8
    31	MOVQ    $0x0000000000000001, R10
    32
    33do_not_update_high_threshold:
    34	MOVW R10, (BX)(R9*2)
    35	INCQ R9
    36
    37init_main_loop_condition:
    38	CMPQ R9, DI
    39	JL   init_main_loop
    40
    41	// Spread symbols
    42	// Calculate table step
    43	MOVQ AX, R9
    44	SHRQ $0x01, R9
    45	MOVQ AX, R10
    46	SHRQ $0x03, R10
    47	LEAQ 3(R9)(R10*1), R9
    48
    49	// Fill add bits values
    50	LEAQ -1(AX), R10
    51	XORQ R11, R11
    52	XORQ R12, R12
    53	JMP  spread_main_loop_condition
    54
    55spread_main_loop:
    56	XORQ    R13, R13
    57	MOVWQSX (CX)(R12*2), R14
    58	JMP     spread_inner_loop_condition
    59
    60spread_inner_loop:
    61	MOVB R12, 1(SI)(R11*8)
    62
    63adjust_position:
    64	ADDQ R9, R11
    65	ANDQ R10, R11
    66	CMPQ R11, R8
    67	JG   adjust_position
    68	INCQ R13
    69
    70spread_inner_loop_condition:
    71	CMPQ R13, R14
    72	JL   spread_inner_loop
    73	INCQ R12
    74
    75spread_main_loop_condition:
    76	CMPQ  R12, DI
    77	JL    spread_main_loop
    78	TESTQ R11, R11
    79	JZ    spread_check_ok
    80	MOVQ  ctx+8(FP), AX
    81	MOVQ  R11, 24(AX)
    82	MOVQ  $+1, ret+16(FP)
    83	RET
    84
    85spread_check_ok:
    86	// Build Decoding table
    87	XORQ DI, DI
    88
    89build_table_main_table:
    90	MOVBQZX 1(SI)(DI*8), CX
    91	MOVWQZX (BX)(CX*2), R8
    92	LEAQ    1(R8), R9
    93	MOVW    R9, (BX)(CX*2)
    94	MOVQ    R8, R9
    95	BSRQ    R9, R9
    96	MOVQ    DX, CX
    97	SUBQ    R9, CX
    98	SHLQ    CL, R8
    99	SUBQ    AX, R8
   100	MOVB    CL, (SI)(DI*8)
   101	MOVW    R8, 2(SI)(DI*8)
   102	CMPQ    R8, AX
   103	JLE     build_table_check1_ok
   104	MOVQ    ctx+8(FP), CX
   105	MOVQ    R8, 24(CX)
   106	MOVQ    AX, 32(CX)
   107	MOVQ    $+2, ret+16(FP)
   108	RET
   109
   110build_table_check1_ok:
   111	TESTB CL, CL
   112	JNZ   build_table_check2_ok
   113	CMPW  R8, DI
   114	JNE   build_table_check2_ok
   115	MOVQ  ctx+8(FP), AX
   116	MOVQ  R8, 24(AX)
   117	MOVQ  DI, 32(AX)
   118	MOVQ  $+3, ret+16(FP)
   119	RET
   120
   121build_table_check2_ok:
   122	INCQ DI
   123	CMPQ DI, AX
   124	JL   build_table_main_table
   125	MOVQ $+0, ret+16(FP)
   126	RET

View as plain text