以下のC言語のコードをアセンブリ言語に変換したいのですが、なぜ算術右シフトをする際に %cl となるのかどなたか教えていただけないでしょうか

C言語版

void shift(int x, int y){
    x <<= 2;
    x >>= y;
    return x;
}

アセンブリ言語版(xは%ebp+8、yは$ebp+12に格納されているとする)

movl 8(%ebp), %eax
shll $2, %eax
movl 12(%ebp), %ecx
sarl %cl, %eax /*ここで%ecx, %eaxでは駄目なのか?*/