_asm{
// --- 行列をMMXレジスタに読み込む
// 16ビットマスク
xor eax,eax
mov eax,0ffffh
movd mm7,eax
mov ax,iTrans_matrix3x3._11
movd mm0,eax
pand mm0,mm7
psllq mm0,16
mov ax,iTrans_matrix3x3._12
movd mm6,eax
pand mm6,mm7
por mm0,mm6
psllq mm0,16
mov ax,iTrans_matrix3x3._13
movd mm6,eax
pand mm6,mm7
por mm0,mm6
mov ax,iTrans_matrix3x3._21
movd mm1,eax
pand mm1,mm7
psllq mm1,16
mov ax,iTrans_matrix3x3._22
movd mm6,eax
pand mm6,mm7
por mm1,mm6
psllq mm1,16
mov ax,iTrans_matrix3x3._23
movd mm6,eax
pand mm6,mm7
por mm1,mm6
mov ax,iTrans_matrix3x3._31
movd mm2,eax
pand mm2,mm7
psllq mm2,16
mov ax,iTrans_matrix3x3._32
movd mm6,eax
pand mm6,mm7
por mm2,mm6
psllq mm2,16
mov ax,iTrans_matrix3x3._33
movd mm6,eax
pand mm6,mm7
por mm2,mm6
// mm0 mm1 mm2 ... 3×3行列
// 頂点をmm3レジスタに読み込む // ループする場合はここから
mov ax,tx
movd mm3,eax
pand mm3,mm7
psllq mm3,16
mov ax,ty
movd mm6,eax
pand mm6,mm7
por mm3,mm6
psllq mm3,16
mov ax,tz
movd mm6,eax
pand mm6,mm7
por mm3,mm6
// 行列計算
pxor mm5,mm5
movq mm4,mm3 // 一段め
pmullw mm4,mm0
paddw mm5,mm4
movq mm4,mm3 // 二段め
pmullw mm4,mm1
paddw mm5,mm4
movq mm4,mm3 // 三段め
pmullw mm4,mm2
paddw mm5,mm4
psraw mm5,8
movd temp2,mm5
psrlq mm5,32
movd temp1,mm5
}
|
このPrejudiceにとって、日付はあってないようなものですが、原則的にはよほどの理由がない限り、アップロードしてから12時間程度は新しい話題を書かないことにしています。