核心热路径(数学/内存/字符串/性能分析)用MASM汇编(SSE/AVX2) 外围系统(窗口/渲染/ECS/音频/UI/脚本)用C语言 含自研编辑器、VisualScript积木编程、中文渲染(glyph_atlas)
128 lines
3.6 KiB
C++
128 lines
3.6 KiB
C++
; ============================================================================
|
|
; 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
|