comparison svp.cpu @ 1615:28f80d1b343e

Support immediate operands for ld and alu ops in SVP. Support double indirect and immediate address modes for alu ops. Fixed DSL issues revealed by those changes
author Michael Pavone <pavone@retrodev.com>
date Mon, 24 Sep 2018 19:09:16 -0700
parents c9639139aedf
children 5e04f9f8bd85
comparison
equal deleted inserted replaced
1614:c9639139aedf 1615:28f80d1b343e
211 invalid P 0 211 invalid P 0
212 invalid P 2 212 invalid P 2
213 local tmp 32 213 local tmp 32
214 meta dst tmp 214 meta dst tmp
215 svp_pop 215 svp_pop
216 meta name "st" 216 meta name "stack"
217 svp_alu_op P tmp 217 svp_alu_op P tmp
218 218
219 PPP0000000000111 alu_p 219 PPP0000000000111 alu_p
220 invalid P 0 220 invalid P 0
221 invalid P 2 221 invalid P 2
229 svp_read_ext R 229 svp_read_ext R
230 lsl val 16 tmp 230 lsl val 16 tmp
231 meta name val 231 meta name val
232 svp_alu_op P tmp 232 svp_alu_op P tmp
233 233
234 PPP0001B000MMRR alu_ram 234 PPP0001B0000MMRR alu_ram
235 invalid P 0 235 invalid P 0
236 invalid P 2 236 invalid P 2
237 svp_ram_read M B R 237 svp_ram_read M B R
238 local tmp 32 238 local tmp 32
239 lsl val 16 tmp 239 lsl val 16 tmp
264 xor tmp a a 264 xor tmp a a
265 end 265 end
266 266
267 update_flags ZN 267 update_flags ZN
268 268
269 PPP0101B0000MMRR alu_ram_indirect
270 invalid P 0
271 invalid P 2
272 svp_ram_read M B R
273 svp_prog_ram_read scratch1
274 local tmp 32
275 lsl val 16 tmp
276
277 switch P
278 case 1
279 dis "sub ((%s%s))" reg modestr
280 sub tmp a a
281
282 case 3
283 dis "cmp ((%s%s))" reg modestr
284 cmp tmp a
285
286 case 4
287 dis "add ((%s%s))" reg modestr
288 add tmp a a
289
290 case 5
291 dis "and ((%s%s))" reg modestr
292 and tmp a a
293
294 case 6
295 dis "or ((%s%s))" reg modestr
296 or tmp a a
297
298 case 7
299 dis "eor ((%s%s))" reg modestr
300 xor tmp a a
301 end
302
303 update_flags ZN
304
269 PPP0000000001111 alu_al 305 PPP0000000001111 alu_al
270 invalid P 0 306 invalid P 0
271 invalid P 2 307 invalid P 2
272 local tmp 32 308 local tmp 32
273 lsl a 16 tmp 309 lsl a 16 tmp
274 310
275 meta name al 311 meta name al
276 svp_alu_op P tmp 312 svp_alu_op P tmp
313
314 PPP0011JAAAAAAAA alu_ram_direct
315 invalid P 0
316 invalid P 2
317 if J
318 meta src ram1.A
319 else
320 meta src ram0.A
321 end
322 svp_alu_op P src
323
324 PPP0010000000000 alu_immed
325 invalid P 0
326 invalid P 2
327 svp_op_fetch
328 svp_alu_op P scratch1
277 329
278 1001000FCCCC0OOO cond_mod 330 1001000FCCCC0OOO cond_mod
279 svp_check_cond F C 331 svp_check_cond F C
280 if istrue 332 if istrue
281 333
300 352
301 000000000DDD0SSS ld_int_int 353 000000000DDD0SSS ld_int_int
302 dis "ld %s, %s" internal.D internal.S 354 dis "ld %s, %s" internal.D internal.S
303 mov internal.S internal.D 355 mov internal.S internal.D
304 356
305 000000000DDD0101 ld_int_st 357 000000000DDD0101 ld_int_stack
306 dis "ld %s, st" internal.D 358 dis "ld %s, stack" internal.D
307 meta dst internal.D 359 meta dst internal.D
308 svp_pop 360 svp_pop
309 361
310 0000000000110101 ld_a_st 362 0000000000110101 ld_a_stack
311 dis "ld a, st" 363 dis "ld a, stack"
312 local tmp 32 364 local tmp 32
313 meta dst tmp 365 meta dst tmp
314 svp_pop 366 svp_pop
315 lsl tmp 16 tmp 367 lsl tmp 16 tmp
316 and 0xFFFF a a 368 and 0xFFFF a a
317 or tmp a a 369 or tmp a a
318 370
319 0000000001110101 ld_p_st 371 0000000001110101 ld_p_stack
320 dis "ld p, st" 372 dis "ld p, stack"
321 local tmp 32 373 local tmp 32
322 meta dst tmp 374 meta dst tmp
323 svp_pop 375 svp_pop
324 lsl tmp 16 tmp 376 lsl tmp 16 tmp
325 and 0xFFFF p p 377 and 0xFFFF p p
326 or tmp p p 378 or tmp p p
327 379
328 0000000001010SSS ld_st_int 380 0000000001010SSS ld_stack_int
329 dis "ld st, %s" internal.S 381 dis "ld stack, %s" internal.S
330 svp_push internal.S 382 svp_push internal.S
331 383
332 0000000001010011 ld_st_a 384 0000000001010011 ld_stack_a
333 dis "ld st, a" 385 dis "ld stack, a"
334 local tmp 32 386 local tmp 32
335 lsr a 16 tmp 387 lsr a 16 tmp
336 svp_push tmp 388 svp_push tmp
337 389
338 0000000001010111 ld_st_p 390 0000000001010111 ld_stack_p
339 dis "ld st, p" 391 dis "ld stack, p"
340 local tmp 32 392 local tmp 32
341 lsr p 16 tmp 393 lsr p 16 tmp
342 svp_push tmp 394 svp_push tmp
343 395
344 0000000000000000 ld_n1_n1 396 0000000000000000 ld_n1_n1
492 local tmp 32 544 local tmp 32
493 lsl val 16 tmp 545 lsl val 16 tmp
494 and 0xFFFF p p 546 and 0xFFFF p p
495 or tmp p p 547 or tmp p p
496 548
497 0000001B0101MMPP ld_st_ram 549 0000001B0101MMPP ld_stack_ram
498 svp_ram_read M B P 550 svp_ram_read M B P
499 dis "ld st, (%s%s)" reg modestr 551 dis "ld stack, (%s%s)" reg modestr
500 svp_push val 552 svp_push val
553
554 000010000DDD0000 ld_int_immed
555 svp_op_fetch
556 dis "ld %s, %X" internal.D scratch1
557 mov scratch1 internal.D
558
559 0000100000000000 ld_n1_immed
560 svp_op_fetch
561 dis "ld -, %X" scratch1
562
563 0000100000110000 ld_a_immed
564 local tmp 32
565 svp_op_fetch
566 dis "ld a, %X" scratch1
567 lsl 16 scratch1 tmp
568 and 0xFFFF a a
569 or tmp a a
570
571 0000100001010000 ld_stack_immed
572 svp_op_fetch
573 dis "ld stack, %X" scratch1
574 svp_push scratch1
575
576 0000100001110000 ld_p_immed
577 local tmp 32
578 svp_op_fetch
579 dis "ld p, %X" scratch1
580 lsl 16 scratch1 tmp
581 and 0xFFFF p p
582 or tmp p p
583
584 000010001DDD0000 ld_ext_immed
585 svp_op_fetch
586 dis "ld %s, %X", external.D, scratch1
587 meta src scratch1
588 svp_write_ext D
589 switch D
590 case 7
591 dis "ld al, %X" scratch1
592
593 default
594 dis "ld %s, %X" external.D scratch1
595 end
501 596
502 0100100FCCCC0000 call_cond 597 0100100FCCCC0000 call_cond
503 svp_check_cond F C 598 svp_check_cond F C
504 svp_op_fetch 599 svp_op_fetch
505 600
512 svp_check_cond F C 607 svp_check_cond F C
513 svp_op_fetch 608 svp_op_fetch
514 if istrue 609 if istrue
515 mov scratch1 pc 610 mov scratch1 pc
516 end 611 end
612
613 svp_prog_ram_read
614 arg src 16
615 cycles 1
616 cmp 1024 src
617
618 if >=U
619 add src src scratch1
620 ocall read_16
621
622 else
623 mov iram.src scratch1
624 end
517 625
518 svp_op_fetch 626 svp_op_fetch
519 cycles 1 627 svp_prog_ram_read pc
520 cmp 1024 pc
521
522 if >=U
523 mov pc scratch1
524 add scratch1 scratch1 scratch1
525 ocall read_16
526
527 else
528 mov iram.pc scratch1
529 end
530 add 1 pc pc 628 add 1 pc pc
531 629
532 svp_run_op 630 svp_run_op
533 svp_op_fetch 631 svp_op_fetch
534 dispatch scratch1 632 dispatch scratch1