Это должно быть какой-то ошибкой в gcc (возможно, блоки __asm имеют неявное дублирование). В любом случае есть много обходных путей:
__asm
{
// ...
mov ah, testData
mov al, ah
shl eax, 16
// ...
};
или
__asm
{
// ...
mov al, testData
mov ah, testData
shl eax, 16
// ...
};
или
__asm
{
// ...
movzx eax, testData
imul eax, 0x0101
shl eax, 16
// ...
};