Comment #0 by bearophile_hugs — 2011-07-19T16:58:20Z
A D2 program:
enum int[1] array1 = [10];
int foo(int[1] v) {
return array1[0] * v[0];
}
const int[1] array2 = [10];
int bar(int[1] v) {
return array2[0] * v[0];
}
void main() {}
The asm of the two functions (dmd 2.054, -O -release), inside bar() the contents of array2 are loaded with a mov instruction:
_D4test3fooFG1iZi comdat
push EAX
lea EAX,[EAX*4][EAX]
add EAX,EAX
pop ECX
ret
_D4test3barFG1iZi comdat
push EAX
mov EAX,_D4test6array2xG1i
imul EAX,[ESP]
pop ECX
ret
Is it possible for the compiler for such common case of const array to remove the mov instruction from the bar () function too?
Comment #1 by robert.schadek — 2024-12-13T17:55:53Z