| a21_txt02_4 | HL-14 | 865行 | 21.5KB | レジスタ変数の導入(46行しか増えない簡単な改造だけど、結構な効果がある) | 2.0倍 | 1.2倍 |
| a21_txt02_4a | HL-14a | 906行 | 22.5KB | レジスタ変数のための最適化(さらに41行を追加してすごい速さに!) | 1.0倍 | 0.9倍 |
| a21_txt02_10 | HL-20 | 964行 | 36.0KB | レジスタ変数の導入(65行しか増えない簡単な改造だけど、結構な効果がある) | 2.1倍 | 1.0倍 |
| a21_txt02_10a | HL-20a | 1014行 | 37.0KB | レジスタ変数のための最適化(さらに50行を追加してすごい速さに!・・・なってない) | 2.1倍 | 0.7倍 |
int align;
void defLabel(int i)
{
+ if (align > 0) {
+ int j = (icq - ic) & 15; // 0-15.
+ if (j > 0 && j <= 7) {
+ putIcX64("66_0f_1f_84_00_00_00_00_00", 0, 0, 0, 0);
+ j = (j + 9) & 15;
+ }
+ if (j > 0) { // 8-15.
+ static char *table[8] = {
+ "0f_1f_84_00_00_00_00_00", "0f_1f_80_00_00_00_00",
+ "66_0f_1f_44_00_00", "0f_1f_44_00_00", "0f_1f_40_00", "0f_1f_00", "66_90", "90"
+ };
+ putIcX64(table[j - 8], 0, 0, 0, 0);
+ }
+ align--;
+ }
var[i] = icq - ic;
}+ } else if (phrCmp(39, "align();", pc)) {
+ align = 1;
+ } else if (phrCmp(40, "align(!!*0);", pc)) {
+ align = var[tc[wpc[0]]];| 1バイトのNOP | 90; |
| 2バイトのNOP | 66_90; |
| 3バイトのNOP | 0f_1f_00; |
| 4バイトのNOP | 0f_1f_40_00; |
| 5バイトのNOP | 0f_1f_44_00_00; |
| 6バイトのNOP | 66_0f_1f_44_00_00; |
| 7バイトのNOP | 0f_1f_80_00_00_00_00; |
| 8バイトのNOP | 0f_1f_84_00_00_00_00_00; |
| 9バイトのNOP | 66_0f_1f_84_00_00_00_00_00; |
| a21_txt02_10 | HL-20 | 964行 | 36.0KB | レジスタ変数の導入(65行しか増えない簡単な改造だけど、結構な効果がある) | 2.1倍 | 1.0倍 |
| a21_txt02_10a | HL-20a | 1014行 | 37.0KB | レジスタ変数のための最適化(さらに50行を追加してすごい速さに!・・・なってない) | 2.1倍 | 0.7倍 |
| a21_txt02_10b | HL-20b | 1035行 | 37.5KB | アライン命令を追加して、HL-20aの成果がはっきり見えるようになった | 1.0倍 | 0.7倍 |
| コメント | お名前 | NameLink | |