diff options
Diffstat (limited to 'lib/rbcodec/dsp')
-rw-r--r-- | lib/rbcodec/dsp/dsp_arm.S | 56 | ||||
-rw-r--r-- | lib/rbcodec/dsp/dsp_arm_v6.S | 6 | ||||
-rw-r--r-- | lib/rbcodec/dsp/dsp_cf.S | 10 |
3 files changed, 36 insertions, 36 deletions
diff --git a/lib/rbcodec/dsp/dsp_arm.S b/lib/rbcodec/dsp/dsp_arm.S index 7e360749a3..685aca411c 100644 --- a/lib/rbcodec/dsp/dsp_arm.S +++ b/lib/rbcodec/dsp/dsp_arm.S | |||
@@ -73,17 +73,17 @@ channels_process_sound_chan_mono: | |||
73 | .type channels_process_sound_chan_custom, %function | 73 | .type channels_process_sound_chan_custom, %function |
74 | channels_process_sound_chan_custom: | 74 | channels_process_sound_chan_custom: |
75 | stmfd sp!, { r4-r10, lr } | 75 | stmfd sp!, { r4-r10, lr } |
76 | 76 | ||
77 | ldr r3, =dsp_sw_gain | 77 | ldr r3, =dsp_sw_gain |
78 | ldr r4, =dsp_sw_cross | 78 | ldr r4, =dsp_sw_cross |
79 | 79 | ||
80 | ldmia r1, { r1, r2 } @ r1 = buf[0], r2 = buf[1] | 80 | ldmia r1, { r1, r2 } @ r1 = buf[0], r2 = buf[1] |
81 | ldr r3, [r3] @ r3 = dsp_sw_gain | 81 | ldr r3, [r3] @ r3 = dsp_sw_gain |
82 | ldr r4, [r4] @ r4 = dsp_sw_cross | 82 | ldr r4, [r4] @ r4 = dsp_sw_cross |
83 | 83 | ||
84 | subs r0, r0, #1 | 84 | subs r0, r0, #1 |
85 | beq .custom_single_sample @ Zero? Only one sample! | 85 | beq .custom_single_sample @ Zero? Only one sample! |
86 | 86 | ||
87 | .custom_loop: | 87 | .custom_loop: |
88 | ldmia r1, { r5, r6 } @ r5 = Li0, r6 = Li1 | 88 | ldmia r1, { r5, r6 } @ r5 = Li0, r6 = Li1 |
89 | ldmia r2, { r7, r8 } @ r7 = Ri0, r8 = Ri1 | 89 | ldmia r2, { r7, r8 } @ r7 = Ri0, r8 = Ri1 |
@@ -94,29 +94,29 @@ channels_process_sound_chan_custom: | |||
94 | smull r12, r14, r7, r3 @ Rc0 = Ri0*gain | 94 | smull r12, r14, r7, r3 @ Rc0 = Ri0*gain |
95 | smlal r9, r10, r7, r4 @ Lc0 += Ri0*cross | 95 | smlal r9, r10, r7, r4 @ Lc0 += Ri0*cross |
96 | smlal r12, r14, r5, r4 @ Rc0 += Li0*cross | 96 | smlal r12, r14, r5, r4 @ Rc0 += Li0*cross |
97 | 97 | ||
98 | mov r9, r9, lsr #31 @ Convert to s0.31 | 98 | mov r9, r9, lsr #31 @ Convert to s0.31 |
99 | mov r12, r12, lsr #31 | 99 | mov r12, r12, lsr #31 |
100 | orr r5, r9, r10, asl #1 | 100 | orr r5, r9, r10, asl #1 |
101 | orr r7, r12, r14, asl #1 | 101 | orr r7, r12, r14, asl #1 |
102 | 102 | ||
103 | smull r9, r10, r6, r3 @ Lc1 = Li1*gain | 103 | smull r9, r10, r6, r3 @ Lc1 = Li1*gain |
104 | smull r12, r14, r8, r3 @ Rc1 = Ri1*gain | 104 | smull r12, r14, r8, r3 @ Rc1 = Ri1*gain |
105 | smlal r9, r10, r8, r4 @ Lc1 += Ri1*cross | 105 | smlal r9, r10, r8, r4 @ Lc1 += Ri1*cross |
106 | smlal r12, r14, r6, r4 @ Rc1 += Li1*cross | 106 | smlal r12, r14, r6, r4 @ Rc1 += Li1*cross |
107 | 107 | ||
108 | mov r9, r9, lsr #31 @ Convert to s0.31 | 108 | mov r9, r9, lsr #31 @ Convert to s0.31 |
109 | mov r12, r12, lsr #31 | 109 | mov r12, r12, lsr #31 |
110 | orr r6, r9, r10, asl #1 | 110 | orr r6, r9, r10, asl #1 |
111 | orr r8, r12, r14, asl #1 | 111 | orr r8, r12, r14, asl #1 |
112 | 112 | ||
113 | stmia r1!, { r5, r6 } @ Store Lc0, Lc1 | 113 | stmia r1!, { r5, r6 } @ Store Lc0, Lc1 |
114 | stmia r2!, { r7, r8 } @ Store Rc0, Rc1 | 114 | stmia r2!, { r7, r8 } @ Store Rc0, Rc1 |
115 | 115 | ||
116 | bgt .custom_loop | 116 | bgt .custom_loop |
117 | 117 | ||
118 | ldmpc cond=lt, regs=r4-r10 @ < 0? even count | 118 | ldmpc cond=lt, regs=r4-r10 @ < 0? even count |
119 | 119 | ||
120 | .custom_single_sample: | 120 | .custom_single_sample: |
121 | ldr r5, [r1] @ handle odd sample | 121 | ldr r5, [r1] @ handle odd sample |
122 | ldr r7, [r2] | 122 | ldr r7, [r2] |
@@ -218,16 +218,16 @@ sample_output_mono: | |||
218 | mov r12, r6, asr #15 | 218 | mov r12, r6, asr #15 |
219 | teq r12, r12, asr #31 | 219 | teq r12, r12, asr #31 |
220 | eorne r6, r14, r6, asr #31 @ Clip (-32768...+32767) | 220 | eorne r6, r14, r6, asr #31 @ Clip (-32768...+32767) |
221 | 221 | ||
222 | and r5, r5, r14, lsr #16 | 222 | and r5, r5, r14, lsr #16 |
223 | and r6, r6, r14, lsr #16 | 223 | and r6, r6, r14, lsr #16 |
224 | orr r5, r5, r5, lsl #16 @ pack first 2 halfwords into 1 word | 224 | orr r5, r5, r5, lsl #16 @ pack first 2 halfwords into 1 word |
225 | orr r6, r6, r6, lsl #16 @ pack last 2 halfwords into 1 word | 225 | orr r6, r6, r6, lsl #16 @ pack last 2 halfwords into 1 word |
226 | stmia r3!, { r5, r6 } | 226 | stmia r3!, { r5, r6 } |
227 | 227 | ||
228 | subs r0, r0, #2 | 228 | subs r0, r0, #2 |
229 | bgt .somloop | 229 | bgt .somloop |
230 | 230 | ||
231 | ldmpc cond=lt, regs=r4-r6 @ even 'count'? return | 231 | ldmpc cond=lt, regs=r4-r6 @ even 'count'? return |
232 | 232 | ||
233 | .som_singlesample: | 233 | .som_singlesample: |
@@ -244,7 +244,7 @@ sample_output_mono: | |||
244 | 244 | ||
245 | ldmpc regs=r4-r6 | 245 | ldmpc regs=r4-r6 |
246 | .size sample_output_mono, .-sample_output_mono | 246 | .size sample_output_mono, .-sample_output_mono |
247 | 247 | ||
248 | /**************************************************************************** | 248 | /**************************************************************************** |
249 | * void sample_output_stereo(int count, struct dsp_data *data, | 249 | * void sample_output_stereo(int count, struct dsp_data *data, |
250 | * const int32_t *src[], int16_t *dst) | 250 | * const int32_t *src[], int16_t *dst) |
@@ -263,7 +263,7 @@ sample_output_stereo: | |||
263 | mov r4, #1 | 263 | mov r4, #1 |
264 | mov r4, r4, lsl r1 @ r4 = 1 << (scale-1) | 264 | mov r4, r4, lsl r1 @ r4 = 1 << (scale-1) |
265 | mov r4, r4, lsr #1 @ | 265 | mov r4, r4, lsr #1 @ |
266 | 266 | ||
267 | mvn r14, #0x8000 @ r14 = 0xffff7fff, needed for | 267 | mvn r14, #0x8000 @ r14 = 0xffff7fff, needed for |
268 | @ clipping and masking | 268 | @ clipping and masking |
269 | subs r0, r0, #1 @ | 269 | subs r0, r0, #1 @ |
@@ -283,7 +283,7 @@ sample_output_stereo: | |||
283 | mov r12, r7, asr #15 | 283 | mov r12, r7, asr #15 |
284 | teq r12, r12, asr #31 | 284 | teq r12, r12, asr #31 |
285 | eorne r7, r14, r7, asr #31 @ Clip (-32768...+32767) | 285 | eorne r7, r14, r7, asr #31 @ Clip (-32768...+32767) |
286 | 286 | ||
287 | add r8, r8, r4 @ r8 = (r8 + 1<<(scale-1)) >> scale | 287 | add r8, r8, r4 @ r8 = (r8 + 1<<(scale-1)) >> scale |
288 | mov r8, r8, asr r1 | 288 | mov r8, r8, asr r1 |
289 | mov r12, r8, asr #15 | 289 | mov r12, r8, asr #15 |
@@ -294,7 +294,7 @@ sample_output_stereo: | |||
294 | mov r12, r9, asr #15 | 294 | mov r12, r9, asr #15 |
295 | teq r12, r12, asr #31 | 295 | teq r12, r12, asr #31 |
296 | eorne r9, r14, r9, asr #31 @ Clip (-32768...+32767) | 296 | eorne r9, r14, r9, asr #31 @ Clip (-32768...+32767) |
297 | 297 | ||
298 | and r6, r6, r14, lsr #16 @ pack first 2 halfwords into 1 word | 298 | and r6, r6, r14, lsr #16 @ pack first 2 halfwords into 1 word |
299 | orr r8, r6, r8, asl #16 | 299 | orr r8, r6, r8, asl #16 |
300 | and r7, r7, r14, lsr #16 @ pack last 2 halfwords into 1 word | 300 | and r7, r7, r14, lsr #16 @ pack last 2 halfwords into 1 word |
@@ -307,7 +307,7 @@ sample_output_stereo: | |||
307 | 307 | ||
308 | ldmpc cond=lt, regs=r4-r9 @ even 'count'? return | 308 | ldmpc cond=lt, regs=r4-r9 @ even 'count'? return |
309 | 309 | ||
310 | .sos_singlesample: | 310 | .sos_singlesample: |
311 | ldr r6, [r2] @ left odd sample | 311 | ldr r6, [r2] @ left odd sample |
312 | ldr r8, [r5] @ right odd sample | 312 | ldr r8, [r5] @ right odd sample |
313 | 313 | ||
@@ -321,7 +321,7 @@ sample_output_stereo: | |||
321 | mov r12, r8, asr #15 | 321 | mov r12, r8, asr #15 |
322 | teq r12, r12, asr #31 | 322 | teq r12, r12, asr #31 |
323 | eorne r8, r14, r8, asr #31 @ Clip (-32768...+32767) | 323 | eorne r8, r14, r8, asr #31 @ Clip (-32768...+32767) |
324 | 324 | ||
325 | and r6, r6, r14, lsr #16 @ pack 2 halfwords into 1 word | 325 | and r6, r6, r14, lsr #16 @ pack 2 halfwords into 1 word |
326 | orr r8, r6, r8, asl #16 | 326 | orr r8, r6, r8, asl #16 |
327 | 327 | ||
@@ -329,19 +329,19 @@ sample_output_stereo: | |||
329 | 329 | ||
330 | ldmpc regs=r4-r9 | 330 | ldmpc regs=r4-r9 |
331 | .size sample_output_stereo, .-sample_output_stereo | 331 | .size sample_output_stereo, .-sample_output_stereo |
332 | #endif /* ARM_ARCH < 6 */ | 332 | #endif /* ARM_ARCH < 6 */ |
333 | 333 | ||
334 | /**************************************************************************** | 334 | /**************************************************************************** |
335 | * void apply_crossfeed(int count, int32_t* src[]) | 335 | * void apply_crossfeed(int count, int32_t* src[]) |
336 | */ | 336 | */ |
337 | .section .text | 337 | .section .text |
338 | .global apply_crossfeed | 338 | .global apply_crossfeed |
339 | apply_crossfeed: | 339 | apply_crossfeed: |
340 | @ unfortunately, we ended up in a bit of a register squeeze here, and need | 340 | @ unfortunately, we ended up in a bit of a register squeeze here, and need |
341 | @ to keep the count on the stack :/ | 341 | @ to keep the count on the stack :/ |
342 | stmdb sp!, { r4-r11, lr } @ stack modified regs | 342 | stmdb sp!, { r4-r11, lr } @ stack modified regs |
343 | ldmia r1, { r2-r3 } @ r2 = src[0], r3 = src[1] | 343 | ldmia r1, { r2-r3 } @ r2 = src[0], r3 = src[1] |
344 | 344 | ||
345 | ldr r1, =crossfeed_data | 345 | ldr r1, =crossfeed_data |
346 | ldmia r1!, { r4-r11 } @ load direct gain and filter data | 346 | ldmia r1!, { r4-r11 } @ load direct gain and filter data |
347 | mov r12, r0 @ better to ldm delay + count later | 347 | mov r12, r0 @ better to ldm delay + count later |
@@ -361,7 +361,7 @@ apply_crossfeed: | |||
361 | smlal r14, r1, r5, r8 @ acc += b0*dr[n] | 361 | smlal r14, r1, r5, r8 @ acc += b0*dr[n] |
362 | mov r9, r1, lsl #1 @ fix format for filter history | 362 | mov r9, r1, lsl #1 @ fix format for filter history |
363 | ldr r12, [r2] @ load left input | 363 | ldr r12, [r2] @ load left input |
364 | smlal r14, r1, r4, r12 @ acc += gain*x_l[n] | 364 | smlal r14, r1, r4, r12 @ acc += gain*x_l[n] |
365 | mov r1, r1, lsl #1 @ fix format | 365 | mov r1, r1, lsl #1 @ fix format |
366 | str r1, [r2], #4 @ save result | 366 | str r1, [r2], #4 @ save result |
367 | 367 | ||
@@ -380,11 +380,11 @@ apply_crossfeed: | |||
380 | 380 | ||
381 | cmp r0, r12 @ need to wrap to start of delay? | 381 | cmp r0, r12 @ need to wrap to start of delay? |
382 | subeq r0, r0, #13*4*2 @ wrap back delay line ptr to start | 382 | subeq r0, r0, #13*4*2 @ wrap back delay line ptr to start |
383 | 383 | ||
384 | subs r14, r14, #1 @ are we finished? | 384 | subs r14, r14, #1 @ are we finished? |
385 | strne r14, [sp, #4] @ nope, save count back to stack | 385 | strne r14, [sp, #4] @ nope, save count back to stack |
386 | bne .cfloop | 386 | bne .cfloop |
387 | 387 | ||
388 | @ save data back to struct | 388 | @ save data back to struct |
389 | ldr r12, =crossfeed_data + 4*4 | 389 | ldr r12, =crossfeed_data + 4*4 |
390 | stmia r12, { r8-r11 } @ save filter history | 390 | stmia r12, { r8-r11 } @ save filter history |
@@ -412,7 +412,7 @@ dsp_downsample: | |||
412 | ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] | 412 | ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] |
413 | add r9, r4, #4 @ r9 = &last_sample[0] | 413 | add r9, r4, #4 @ r9 = &last_sample[0] |
414 | ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] | 414 | ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] |
415 | sub r11, r0, #1 | 415 | sub r11, r0, #1 |
416 | ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... | 416 | ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... |
417 | str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample | 417 | str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample |
418 | movs r9, r1, lsr #16 @ r9 = pos = phase >> 16 | 418 | movs r9, r1, lsr #16 @ r9 = pos = phase >> 16 |
@@ -469,7 +469,7 @@ dsp_upsample: | |||
469 | ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] | 469 | ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] |
470 | add r9, r4, #4 @ r9 = &last_sample[0] | 470 | add r9, r4, #4 @ r9 = &last_sample[0] |
471 | mov r1, r12, lsl #16 @ we'll use carry to detect pos increments | 471 | mov r1, r12, lsl #16 @ we'll use carry to detect pos increments |
472 | sub r11, r0, #1 | 472 | sub r11, r0, #1 |
473 | ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... | 473 | ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... |
474 | ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] | 474 | ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] |
475 | str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample | 475 | str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample |
@@ -556,6 +556,6 @@ dsp_apply_gain: | |||
556 | .dag_evencount: | 556 | .dag_evencount: |
557 | subs r3, r3, #1 | 557 | subs r3, r3, #1 |
558 | bgt .dag_outerloop @ end of outer loop | 558 | bgt .dag_outerloop @ end of outer loop |
559 | 559 | ||
560 | ldmpc regs=r4-r8 | 560 | ldmpc regs=r4-r8 |
561 | .size dsp_apply_gain, .-dsp_apply_gain | 561 | .size dsp_apply_gain, .-dsp_apply_gain |
diff --git a/lib/rbcodec/dsp/dsp_arm_v6.S b/lib/rbcodec/dsp/dsp_arm_v6.S index 39949498ea..a9a88ce5bf 100644 --- a/lib/rbcodec/dsp/dsp_arm_v6.S +++ b/lib/rbcodec/dsp/dsp_arm_v6.S | |||
@@ -63,7 +63,7 @@ sample_output_mono: | |||
63 | ssat r12, #16, r12 @ | 63 | ssat r12, #16, r12 @ |
64 | pkhbt r12, r12, r12, asl #16 @ | 64 | pkhbt r12, r12, r12, asl #16 @ |
65 | str r12, [r3] @ store So | 65 | str r12, [r3] @ store So |
66 | @ | 66 | @ |
67 | ldmfd sp!, { r4, pc } @ | 67 | ldmfd sp!, { r4, pc } @ |
68 | .size sample_output_mono, .-sample_output_mono | 68 | .size sample_output_mono, .-sample_output_mono |
69 | 69 | ||
@@ -79,7 +79,7 @@ sample_output_stereo: | |||
79 | @ input: r0 = count, r1 = data, r2 = src, r3 = dst | 79 | @ input: r0 = count, r1 = data, r2 = src, r3 = dst |
80 | stmfd sp!, { r4-r7, lr } @ | 80 | stmfd sp!, { r4-r7, lr } @ |
81 | @ | 81 | @ |
82 | ldr r1, [r1] @ r1 = data->output_scale | 82 | ldr r1, [r1] @ r1 = data->output_scale |
83 | ldmia r2, { r2, r4 } @ r2 = src[0], r4 = src[1] | 83 | ldmia r2, { r2, r4 } @ r2 = src[0], r4 = src[1] |
84 | @ | 84 | @ |
85 | mov r5, #1 @ r5 = 1 << (scale - 1) | 85 | mov r5, #1 @ r5 = 1 << (scale - 1) |
@@ -95,7 +95,7 @@ sample_output_stereo: | |||
95 | qadd r7, r7, r5 @ Li0+Ri0 to So0, Li1+Ri1 to So1 | 95 | qadd r7, r7, r5 @ Li0+Ri0 to So0, Li1+Ri1 to So1 |
96 | qadd r12, r12, r5 @ | 96 | qadd r12, r12, r5 @ |
97 | qadd r14, r14, r5 @ | 97 | qadd r14, r14, r5 @ |
98 | mov r6, r6, asr r1 @ | 98 | mov r6, r6, asr r1 @ |
99 | mov r7, r7, asr r1 @ | 99 | mov r7, r7, asr r1 @ |
100 | mov r12, r12, asr r1 @ | 100 | mov r12, r12, asr r1 @ |
101 | mov r14, r14, asr r1 @ | 101 | mov r14, r14, asr r1 @ |
diff --git a/lib/rbcodec/dsp/dsp_cf.S b/lib/rbcodec/dsp/dsp_cf.S index cda811a7d5..15ec7eb383 100644 --- a/lib/rbcodec/dsp/dsp_cf.S +++ b/lib/rbcodec/dsp/dsp_cf.S | |||
@@ -68,7 +68,7 @@ dsp_apply_gain: | |||
68 | */ | 68 | */ |
69 | .section .text | 69 | .section .text |
70 | .align 2 | 70 | .align 2 |
71 | .global apply_crossfeed | 71 | .global apply_crossfeed |
72 | apply_crossfeed: | 72 | apply_crossfeed: |
73 | lea.l -44(%sp), %sp | | 73 | lea.l -44(%sp), %sp | |
74 | movem.l %d2-%d7/%a2-%a6, (%sp) | save all regs | 74 | movem.l %d2-%d7/%a2-%a6, (%sp) | save all regs |
@@ -124,7 +124,7 @@ apply_crossfeed: | |||
124 | movem.l (%sp), %d2-%d7/%a2-%a6 | restore all regs | 124 | movem.l (%sp), %d2-%d7/%a2-%a6 | restore all regs |
125 | lea.l 44(%sp), %sp | | 125 | lea.l 44(%sp), %sp | |
126 | rts | | 126 | rts | |
127 | .size apply_crossfeed,.-apply_crossfeed | 127 | .size apply_crossfeed,.-apply_crossfeed |
128 | 128 | ||
129 | /**************************************************************************** | 129 | /**************************************************************************** |
130 | * int dsp_downsample(int count, struct dsp_data *data, | 130 | * int dsp_downsample(int count, struct dsp_data *data, |
@@ -422,7 +422,7 @@ sample_output_stereo: | |||
422 | movem.l %d1-%d7/%a2-%a6, (%sp) | be the far more common condition | 422 | movem.l %d1-%d7/%a2-%a6, (%sp) | be the far more common condition |
423 | move.l #0x80, %macsr | put emac unit in signed int mode | 423 | move.l #0x80, %macsr | put emac unit in signed int mode |
424 | movem.l 52(%sp), %a0-%a2/%a4 | | 424 | movem.l 52(%sp), %a0-%a2/%a4 | |
425 | lea.l (%a4, %a0.l*4), %a0 | %a0 = end address | 425 | lea.l (%a4, %a0.l*4), %a0 | %a0 = end address |
426 | move.l (%a1), %d1 | %a1 = multiplier: (1 << (16 - scale)) | 426 | move.l (%a1), %d1 | %a1 = multiplier: (1 << (16 - scale)) |
427 | sub.l #16, %d1 | | 427 | sub.l #16, %d1 | |
428 | neg.l %d1 | | 428 | neg.l %d1 | |
@@ -448,7 +448,7 @@ sample_output_stereo: | |||
448 | movclr.l %acc0, %d1 | get possibly saturated results | 448 | movclr.l %acc0, %d1 | get possibly saturated results |
449 | movclr.l %acc1, %d2 | | 449 | movclr.l %acc1, %d2 | |
450 | swap %d2 | move R to low word | 450 | swap %d2 | move R to low word |
451 | move.w %d2, %d1 | interleave MS 16 bits of each | 451 | move.w %d2, %d1 | interleave MS 16 bits of each |
452 | move.l %d1, (%a4)+ | ...and write both | 452 | move.l %d1, (%a4)+ | ...and write both |
453 | cmp.l %a4, %d0 | | 453 | cmp.l %a4, %d0 | |
454 | bhi.b 10b | long loop 0 | | 454 | bhi.b 10b | long loop 0 | |
@@ -530,7 +530,7 @@ sample_output_mono: | |||
530 | movem.l %d1-%d5/%a2-%a4, (%sp) | be the far more common condition | 530 | movem.l %d1-%d5/%a2-%a4, (%sp) | be the far more common condition |
531 | move.l #0x80, %macsr | put emac unit in signed int mode | 531 | move.l #0x80, %macsr | put emac unit in signed int mode |
532 | movem.l 36(%sp), %a0-%a3 | | 532 | movem.l 36(%sp), %a0-%a3 | |
533 | lea.l (%a3, %a0.l*4), %a0 | %a0 = end address | 533 | lea.l (%a3, %a0.l*4), %a0 | %a0 = end address |
534 | move.l (%a1), %d1 | %d5 = multiplier: (1 << (16 - scale)) | 534 | move.l (%a1), %d1 | %d5 = multiplier: (1 << (16 - scale)) |
535 | sub.l #16, %d1 | | 535 | sub.l #16, %d1 | |
536 | neg.l %d1 | | 536 | neg.l %d1 | |