135 lines
5.7 KiB
ArmAsm
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
|