История изменений
Исправление
jpegqs,
(текущая версия)
:
ПыСы. На нормальных архитектурах movz или его аналог справляется с задачей на ура. И в нынешних реалиях это гораздо лучше чем вгружать пол-регистра (погуглите «partial register stall»).
Я читаю бред дилетанта, который считает что значения берутся только из памяти. И что существует только x86. И что он самый умный, раз немного знает ассемблер. И думает что нет людей что знают ассемблер лучше него, потому что в наши дни мало кто пишет на ассемблере и он с ними не пересекался.
Достаточно любой арифметической операции и придётся добавлять расширение после неё. А int используют часто, в том числе в циклах. Где размер числа никак не влияет, так как и в стек может не сохраняться.
int test_int(int a, int b, int *x) {
return x[a + b];
}
int test_unsigned(unsigned a, unsigned b, int *x) {
return x[a + b];
}
int test_long(long a, long b, int *x) {
return x[a + b];
}
test_int:
add edi, esi
movsx rdi, edi
mov eax, DWORD PTR [rdx+rdi*4]
ret
test_unsigned:
lea eax, [rdi+rsi]
mov eax, DWORD PTR [rdx+rax*4]
ret
test_long:
add rdi, rsi
mov eax, DWORD PTR [rdx+rdi*4]
ret
Исходная версия
jpegqs,
:
ПыСы. На нормальных архитектурах movz или его аналог справляется с задачей на ура. И в нынешних реалиях это гораздо лучше чем вгружать пол-регистра (погуглите «partial register stall»).
Я читаю бред дилетанта, который считает что значения берутся только из памяти. И что существует только x86. И что он самый умный, раз немного знает ассемблер. И думает что нет людей что знают ассемблер лучше него, потому что в наши дни мало кто пишет на ассемблере и он с ними не пересекался.
Достаточно любой арифметической операции и придётся добавлять расширение после неё. А int используют часто, в том числе в циклах. Где размер числа никак не влияет, так как и в стек может не сохраняться.
int test_int(int a, int b, int *x) {
return x[a + b];
}
int test_long(long a, long b, int *x) {
return x[a + b];
}
test_int:
add edi, esi
movsx rdi, edi
mov eax, DWORD PTR [rdx+rdi*4]
ret
test_long:
add rdi, rsi
mov eax, DWORD PTR [rdx+rdi*4]
ret