; ============================================================================ ; asm_macros.inc - MASM 通用宏定义 ; Windows x64 调用约定: RCX, RDX, R8, R9 传参, XMM0-XMM3 浮点 ; ============================================================================ ; --- 函数帧管理宏 --- ; PROLOGUE: 保存非易失寄存器, 分配栈空间 ; 使用: PROLOGUE 栈空间大小 PROLOGUE MACRO stack_size:REQ push rbx push rbp push rdi push rsi push r12 push r13 push r14 push r15 sub rsp, stack_size ; 保存浮点参数寄存器 (如果有) movsd qword ptr [rsp + stack_size - 8], xmm6 movsd qword ptr [rsp + stack_size - 16], xmm7 ENDM ; EPILOGUE: 恢复非易失寄存器, 释放栈空间 EPILOGUE MACRO stack_size:REQ movsd xmm6, qword ptr [rsp + stack_size - 8] movsd xmm7, qword ptr [rsp + stack_size - 16] add rsp, stack_size pop r15 pop r14 pop r13 pop r12 pop rsi pop rdi pop rbp pop rbx ret ENDM ; --- SSE/AVX 常量 --- .DATA ALIGN 16 sse_mask_abs DD 07FFFFFFFH, 07FFFFFFFH, 07FFFFFFFH, 07FFFFFFFH ; 绝对值掩码 sse_negate DD 80000000H, 80000000H, 80000000H, 80000000H ; 符号位掩码 sse_one DD 3F800000H, 3F800000H, 3F800000H, 3F800000H ; 1.0f sse_half DD 3F000000H, 3F000000H, 3F000000H, 3F000000H ; 0.5f eps_float DD 33D6BF94H ; 1e-6f .CODE ; --- 工具宏 --- ; LOAD_VEC3: 从内存加载 Vec3 到 XMM 寄存器 (填充 w=1.0) ; ptr: 内存地址, reg: XMM 寄存器 LOAD_VEC3 MACRO ptr, reg movss xmm0, dword ptr [ptr] ; x movss xmm1, dword ptr [ptr + 4] ; y movss xmm2, dword ptr [ptr + 8] ; z unpcklps xmm0, xmm1 ; {x, y, ?, ?} movss xmm3, dword ptr [sse_one] ; w = 1.0 unpcklps xmm2, xmm3 ; {z, 1.0, ?, ?} movlhps xmm0, xmm2 ; {x, y, z, 1.0} movaps reg, xmm0 ENDM ; STORE_VEC3: 将 XMM 寄存器的前3个float存储到内存 STORE_VEC3 MACRO reg, ptr movss dword ptr [ptr], xmm0 ; x shufps xmm0, xmm0, 01010101b movss dword ptr [ptr + 4], xmm0 ; y shufps xmm0, xmm0, 10101010b movss dword ptr [ptr + 8], xmm0 ; z ENDM ; --- 外部函数声明 --- externdef vec3_add:PROC externdef vec3_sub:PROC externdef vec3_scale:PROC externdef vec3_dot:PROC externdef vec3_cross:PROC externdef vec3_length:PROC externdef vec3_normalize:PROC externdef vec3_lerp:PROC externdef vec3_distance:PROC externdef vec4_add:PROC externdef vec4_sub:PROC externdef vec4_mul:PROC externdef vec4_dot:PROC externdef vec4_length:PROC externdef vec4_normalize:PROC externdef mat4_identity:PROC externdef mat4_multiply:PROC externdef mat4_transpose:PROC externdef mat4_invert:PROC externdef mat4_translate:PROC externdef mat4_scale_f:PROC externdef mat4_rotate_x:PROC externdef mat4_rotate_y:PROC externdef mat4_rotate_z:PROC externdef mat4_perspective:PROC externdef mat4_orthographic:PROC externdef mat4_lookat:PROC externdef quat_multiply:PROC externdef quat_conjugate:PROC externdef quat_normalize:PROC externdef quat_rotate_vec3:PROC externdef quat_slerp:PROC externdef quat_to_matrix:PROC externdef quat_from_axis_angle:PROC externdef quat_from_euler:PROC externdef mem_aligned_alloc:PROC externdef mem_aligned_free:PROC externdef mem_aligned_realloc:PROC externdef fast_memcpy:PROC externdef fast_memset:PROC externdef fast_strlen:PROC externdef fast_strcmp:PROC externdef prof_rdtsc:PROC externdef prof_cycles_to_ms:PROC externdef prof_get_freq:PROC