mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
fix(templates/amd64-386, tests): fix global stereo sends and add regression test for future
the send asm code is quite ugly atm (pushf & popf to save stereo flag), but the new regression test should ensure we don't break it again if we eventually refactor it
This commit is contained in:
parent
c60f6e0f0e
commit
5f7eed4194
@ -89,6 +89,14 @@ su_op_aux_mono:
|
||||
{{.Func "su_op_send" "Opcode"}}
|
||||
lodsw
|
||||
mov {{.CX}}, [{{.Stack "Voice"}}] ; load pointer to voice
|
||||
{{- if .SupportsParamValueOtherThan "send" "voice" 0}}
|
||||
pushf ; uh ugly: we save the flags just for the stereo carry bit. Doing the .CX loading later crashed the synth for stereo sends as loading the synth address from stack was f'd up by the "call su_op_send_mono"
|
||||
test {{.AX}}, 0x8000
|
||||
jz su_op_send_skipglobal
|
||||
mov {{.CX}}, [{{.Stack "Synth"}} + {{.PTRSIZE}}]
|
||||
su_op_send_skipglobal:
|
||||
popf
|
||||
{{- end}}
|
||||
{{- if .StereoAndMono "send"}}
|
||||
jnc su_op_send_mono
|
||||
{{- end}}
|
||||
@ -102,12 +110,6 @@ su_op_aux_mono:
|
||||
jnz su_op_send_mono
|
||||
fxch ; swap them back: l r
|
||||
su_op_send_mono:
|
||||
{{- end}}
|
||||
{{- if .SupportsParamValueOtherThan "send" "voice" 0}}
|
||||
test {{.AX}}, 0x8000
|
||||
jz su_op_send_skipglobal
|
||||
mov {{.CX}}, [{{.Stack "Synth"}}]
|
||||
su_op_send_skipglobal:
|
||||
{{- end}}
|
||||
test {{.AX}}, 0x8 ; if the SEND_POP bit is not set
|
||||
jnz su_op_send_skippush
|
||||
|
@ -6,7 +6,7 @@ function(regression_test testname)
|
||||
else()
|
||||
set(source ${ARGV3}.yml)
|
||||
endif()
|
||||
|
||||
|
||||
set(asmfile ${testname}.asm)
|
||||
set (headerfile ${CMAKE_CURRENT_BINARY_DIR}/${testname}.h)
|
||||
|
||||
@ -66,7 +66,8 @@ regression_test(test_invgain LOADVAL INVGAIN)
|
||||
regression_test(test_invgain_stereo INVGAIN)
|
||||
regression_test(test_send LOADVAL SEND)
|
||||
regression_test(test_send_stereo SEND)
|
||||
regression_test(test_send_global SEND)
|
||||
regression_test(test_send_global SEND SEND_GLOBAL)
|
||||
regression_test(test_send_global_stereo SEND_GLOBAL)
|
||||
regression_test(test_receive SEND RECEIVE)
|
||||
regression_test(test_receive_stereo RECEIVE)
|
||||
regression_test(test_in LOADVAL IN)
|
||||
|
BIN
tests/expected_output/test_send_global_stereo.raw
Normal file
BIN
tests/expected_output/test_send_global_stereo.raw
Normal file
Binary file not shown.
33
tests/test_send_global_stereo.yml
Normal file
33
tests/test_send_global_stereo.yml
Normal file
@ -0,0 +1,33 @@
|
||||
bpm: 100
|
||||
rowsperpattern: 16
|
||||
rowsperbeat: 4
|
||||
tracks:
|
||||
- numvoices: 1
|
||||
sequence: [0]
|
||||
patterns: [[64, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]]
|
||||
patch:
|
||||
instruments:
|
||||
- numvoices: 1
|
||||
units:
|
||||
- type: loadval
|
||||
parameters: {stereo: 0, value: 64}
|
||||
- type: loadval
|
||||
parameters: {stereo: 0, value: 96}
|
||||
- type: send
|
||||
parameters: {amount: 128, port: 0, sendpop: 1, stereo: 1, unit: 3, voice: 2}
|
||||
- type: receive
|
||||
parameters: {stereo: 1}
|
||||
- type: out
|
||||
parameters: {gain: 128, stereo: 1}
|
||||
- numvoices: 1
|
||||
units:
|
||||
- type: loadval
|
||||
parameters: {stereo: 0, value: 0}
|
||||
- type: loadval
|
||||
parameters: {stereo: 0, value: 64}
|
||||
- type: send
|
||||
parameters: {amount: 96, port: 0, sendpop: 1, stereo: 1, unit: 3, voice: 1}
|
||||
- type: receive
|
||||
parameters: {stereo: 1}
|
||||
- type: out
|
||||
parameters: {gain: 128, stereo: 1}
|
Loading…
Reference in New Issue
Block a user