Files
lity3d/Engine/ASM/asm_macros.inc
T
shuiyu1123 0669d102ce feat: major engine overhaul - scene demo with lighting, sphere, ground
- Scene Demo: cube + sphere + ground plane with proper lighting
- Audio: XAudio2 dynamic loading + WAV playback
- Physics: expanded collision system
- Renderer: improved pipeline with materials
- UI: extended widget system
- VisualScript: enhanced serializer + block interactions
- ASM: optimized math/memory/profiling routines
- Window: mouse input + scroll support
2026-07-12 08:21:07 +08:00

138 lines
3.8 KiB
PHP

; ============================================================================
; 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
; C 数学运行时
externdef cosf:PROC
externdef sinf:PROC
externdef tanf:PROC
; Windows API
externdef Sleep:PROC
externdef QueryPerformanceFrequency:PROC
externdef QueryPerformanceCounter:PROC