Files
IPA_projekt_2026/projekt_win/src/volcano_kernels.s
Tomas G. 23bb2d2749 init
2026-03-13 08:16:01 +01:00

135 lines
5.7 KiB
ArmAsm

.intel_syntax noprefix
.code64
.section .rodata
.align 32
# Scalar constants
vk_zero: .float 0.0
vk_one: .float 1.0
vk_eps: .float 0.0001
vk_inv_temp_s: .float 0.00111111111
vk_temp_norm_max_s: .float 1.6
vk_shape_bias: .float 0.35
vk_shape_scale: .float 0.65
vk_buoyancy_k: .float 0.09
vk_wind_bias: .float 0.4
vk_wind_scale: .float 0.5
vk_damp_scale: .float 0.02
vk_damp_min: .float 0.90
vk_damp_max: .float 0.998
vk_min_rad2_s: .float 0.04
vk_vent_rad2_s: .float 1.2
vk_vent_scale_s: .float 5.2
vk_life_base_s: .float 0.14
vk_life_scale_s: .float 0.10
vk_cool_base_s: .float 0.55
vk_cool_scale_s: .float 0.6
vk_cool_rad_s: .float 0.1
# Vector constants
vk_vec_zero: .float 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
vk_vec_one: .float 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
vk_vec_four: .float 4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0
vk_vec_six: .float 6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0
vk_vec_eps: .float 0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001
vk_vec_drop_eps: .float 0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001
vk_vec_shape_bias: .float 0.35,0.35,0.35,0.35,0.35,0.35,0.35,0.35
vk_vec_shape_scale: .float 0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65
vk_vec_inv_temp: .float 0.00111111111,0.00111111111,0.00111111111,0.00111111111,0.00111111111,0.00111111111,0.00111111111,0.00111111111
vk_vec_temp_max: .float 1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6
vk_vec_min_rad2: .float 0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04
vk_vec_vent_rad2: .float 1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2
vk_vec_vent_scale: .float 5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2
vk_vec_buoy_scale: .float 0.09,0.09,0.09,0.09,0.09,0.09,0.09,0.09
vk_vec_wind_bias: .float 0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4
vk_vec_wind_scale: .float 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5
vk_vec_damp_scale: .float 0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02
vk_vec_damp_min: .float 0.90,0.90,0.90,0.90,0.90,0.90,0.90,0.90
vk_vec_damp_max: .float 0.998,0.998,0.998,0.998,0.998,0.998,0.998,0.998
vk_vec_life_base: .float 0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14
vk_vec_life_scale: .float 0.10,0.10,0.10,0.10,0.10,0.10,0.10,0.10
vk_vec_cool_base: .float 0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55
vk_vec_cool_scale: .float 0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6
vk_vec_cool_rad: .float 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1
vk_vec_fluid_min: .float 650.0,650.0,650.0,650.0,650.0,650.0,650.0,650.0
vk_vec_inv_fluid: .float 0.00153846154,0.00153846154,0.00153846154,0.00153846154,0.00153846154,0.00153846154,0.00153846154,0.00153846154
vk_vec_k_base: .float 0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18
vk_vec_k_scale: .float 1.22,1.22,1.22,1.22,1.22,1.22,1.22,1.22
vk_vec_max_out: .float 0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94
vk_vec_max_temp: .float 1520.0,1520.0,1520.0,1520.0,1520.0,1520.0,1520.0,1520.0
vk_vec_lava_heat_b: .float 420.0,420.0,420.0,420.0,420.0,420.0,420.0,420.0
vk_vec_lava_heat_s: .float 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0
.text
.macro FLOW_FROM_DROP_AVX dst, drop, kval, tmp
# TODO: implement vector version of flowFromDrop:
# max(0, drop) -> shape -> result = pos * k * shape
.endm
# -----------------------------------------------------------------------------
# float volcanoFlowFromDropAsm(float drop, float k);
# -----------------------------------------------------------------------------
.global volcanoFlowFromDropAsm
volcanoFlowFromDropAsm:
# TODO: scalar helper used by lava flow
ret
# -----------------------------------------------------------------------------
# void volcanoParticleStepAsm(...)
# -----------------------------------------------------------------------------
.global volcanoParticleStepAsm
volcanoParticleStepAsm:
# TODO: scalar single-particle step
ret
# -----------------------------------------------------------------------------
# void volcanoParticleStepBatchAsm(...)
# -----------------------------------------------------------------------------
.global volcanoParticleStepBatchAsm
volcanoParticleStepBatchAsm:
# TODO:
# 1. split count into simdCount and scalar tail
# 2. call volcanoParticleStepSIMDAsm for full 8-wide blocks
# 3. finish remaining particles with scalar path
ret
# -----------------------------------------------------------------------------
# void volcanoParticleStepSIMDAsm(...)
# -----------------------------------------------------------------------------
.global volcanoParticleStepSIMDAsm
volcanoParticleStepSIMDAsm:
# TODO:
# - load 8 particles (SoA)
# - compute tempNorm, radius2, invR, ventPush
# - update velX/velY/velZ
# - apply damping
# - update posX/posY/posZ
# - update life and temp
ret
# -----------------------------------------------------------------------------
# void volcanoUpdateLavaFluxSIMDAsm(...)
# -----------------------------------------------------------------------------
.global volcanoUpdateLavaFluxSIMDAsm
volcanoUpdateLavaFluxSIMDAsm:
# TODO:
# - iterate interior cells by rows
# - process 8 cells at once
# - compute fluidity, k coefficients, in/out flow
# - clamp output and write lavaHeightNext
ret
# -----------------------------------------------------------------------------
# void volcanoDiffuseHeatSIMDAsm(...)
# -----------------------------------------------------------------------------
.global volcanoDiffuseHeatSIMDAsm
volcanoDiffuseHeatSIMDAsm:
# TODO:
# - iterate interior cells by rows
# - compute laplacian
# - add lava heating, subtract cooling
# - clamp to [ambientTemperature, 1520]
ret