Request for review: 6896617: Optimize sun.nio.cs.ISO_8859_1$Encode.encodeArrayLoop() on x86

Ulf Zibis Ulf.Zibis at CoSoCo.de
Sat Jan 26 01:06:28 UTC 2013


Am 18.01.2013 19:26, schrieb Vladimir Kozlov:
> Here are Hotspot changes with new jtreg test:
>
> http://cr.openjdk.java.net/~kvn/6896617/webrev

Hi Vladimir,

now I've tried to understand your hotspot code :-)

I tried to do some optimization with less jumps for small strings:

     jmp(len >= 8) --> L_check_16_chars
L_check_1_char:
     jmp(len = 0) --> L_done

L_init_1_mask:
     init_1_mask();
L_copy_1_char:
     jmp(*src | mask) --> L_unmappable
     copy_1_char(len++);
     jmp(len != 0) --> copy_1_char
L_done:
     return(result)

L_check_16_chars:
     jmp(len >= 16) --> L_check_32_chars

L_init_8_masks:
     init_8_masks();
     jmp(*src | mask) --> L_init_1_mask
     copy_8_chars(len++8);
     jmp(len != 0) --> L_init_1_mask
     jmp() --> L_done

L_check_32_chars:
     jmp(len >= 32) --> L_init_32_masks:

L_init_16_masks:
     init_16_masks();
     jmp(*src | mask) --> L_init_8_masks
     copy_16_chars(len++16);
     jmp(len >= 8) --> L_init_8_masks
     jmp() --> L_check_1_char

L_init_32_masks:
     init_32_masks();
L_copy_32_chars:
     jmp(*src | mask) --> L_init_16_masks
     copy_32_chars(len++32);
     jmp(len >= 32) --> copy_32_chars
     jmp() --> L_check_16_chars

L_unmappable:
     result += len;
     jmp() --> L_done


-Ulf




More information about the core-libs-dev mailing list