doubango/tinySIGCOMP/asm/deflate.asm
175b478c
 at (32)
 readonly (0)
 
 :index                      pad (2)
 :extra_length_bits          pad (2)
 :len_value                  pad (2)
 :extra_dist_bits            pad (2)
 :dist_value                 pad (2)
 
 
 at (42)
 
 :req_feed_loc                   pad (1)
 :req_feed_len                   pad (1)
 :req_feed_field                 pad (12)
 :hash_start                     pad (8)
 
 at (64)
 
 :byte_copy_left                 pad (2)
 :byte_copy_right                pad (2)
 :input_bit_order                pad (2)
 :decompressed_ptr               pad (2)
 :length_table                   pad (116)
 :distance_table                 pad (120)
 
 :hash_len_loc                   pad (2)
 :state_len_loc                  pad (2)
 :ret_params_loc                 pad (1)
 :sigcomp_version                pad (1)
 
 align (64)
 
 
 readonly (1)
 :initialize_memory
 
 set (udvm_memory_size, 8192)
 set (length_table_start, (((length_table - 4) / 4) + 16384))
 set (length_table_mid, (length_table_start + 24))
 set (dist_table_start, (distance_table / 4))
 
 MULTILOAD (64, 122, circular_buffer, udvm_memory_size, 5,
 circular_buffer,
 
 0,       3,       0,       4,       0,       5,
 0,       6,       0,       7,       0,       8,
 0,       9,       0,       10,      1,       11,
 1,       13,      1,       15,      1,       17,
 2,       19,      2,       23,      2,       27,
 2,       31,      3,       35,      3,       43,
 3,       51,      3,       59,      4,       67,
 4,       83,      4,       99,      4,       115,
 5,       131,     5,       163,     5,       195,
 5,       227,     0,       258,
 
 0,       1,       0,       2,       0,       3,
 0,       4,       1,       5,       1,       7,
 2,       9,       2,       13,      3,       17,
 3,       25,      4,       33,      4,       49,
 5,       65,      5,       97,      6,       129,
 6,       193,     7,       257,     7,       385,
 8,       513,     8,       769,     9,       1025,
 9,       1537,    10,      2049,    10,      3073,
 11,      4097,    11,      6145,    12,      8193,
 12,      12289,   13,      16385,   13,      24577)
 
 ; -- hash_len, state_len, params, version, dicts
 INPUT-BYTES (6, hash_len_loc, !)
 LOAD (66, $state_len_loc)
 ADD(66, 64)
 
 
 :decompress_sigcomp_msg
 
 :start_decomp
 
 INPUT-BITS (3, extra_length_bits, !)
 
 :next_char
 
 INPUT-HUFFMAN (index, end_of_msg, 4,
    7, 0, 23, length_table_start,
    1, 48, 191, 0,
    0, 192, 199, length_table_mid,
    1, 400, 511, 144)
 COMPARE ($index, length_table_start, literal, end_of_msg,
 length_distance)
 
 :literal
 
 set (index_lsb, (index + 1))
 
 OUTPUT (index_lsb, 1)
 COPY-LITERAL (index_lsb, 1, $decompressed_ptr)
 JUMP (next_char)
 
 :length_distance
 
 ; this is the length part
 
 MULTIPLY ($index, 4)
 COPY ($index, 4, extra_length_bits)
 INPUT-BITS ($extra_length_bits, extra_length_bits, !)
 ADD ($len_value, $extra_length_bits)
 
 ; this is the distance part
 
 INPUT-HUFFMAN (index, !, 1, 5, 0, 31, dist_table_start)
 MULTIPLY ($index, 4)
 COPY ($index, 4, extra_dist_bits)
 
 
 INPUT-BITS ($extra_dist_bits, extra_dist_bits, !)
 ADD ($dist_value, $extra_dist_bits)
 LOAD (index, $decompressed_ptr)
 COPY-OFFSET ($dist_value, $len_value, $decompressed_ptr)
 OUTPUT ($index, $len_value)
 JUMP (next_char)
 
 :end_of_msg
 
 
 LOAD (req_feed_loc, 1158)
 MULTILOAD (hash_start, 4, $state_len_loc, 64, decompress_sigcomp_msg, 6)
 SHA-1 (hash_start, $hash_len_loc, req_feed_field)
 
 END-MESSAGE (req_feed_loc, ret_params_loc, $state_len_loc, 64, decompress_sigcomp_msg, 6, 0)
 
 readonly (0)
 :circular_buffer