velipso / gvasm

Assembler and disassembler designed specifically for Game Boy Advance homebrew.
BSD Zero Clause License
50 stars 1 forks source link

Macro idea #40

Open velipso opened 1 year ago

velipso commented 1 year ago

What if macros were just:

.script
  export foo = {
    { 'temp:reg', 'shift:int', 'save:regrange' }, // parameters
    ` // body
    ldr   $temp, =123
    lsls  $temp, #$shift
    push  $save
    `
  }
.end

// invoked via:
movs  r1, #23
%foo  r0, 10, {r0-r3}
velipso commented 1 year ago

na, I want full scripting, I like something like this better:

.macro %foo temp, shift, save
  // sink script with temp, shift, save set to strings
  put """
    ldr  $temp, =123
    lsls $temp, #$shift
    push $save
  """
.end

%foo r0, 10, {r0-r3}

equivalent to:

.script
  var temp = 'r0'
  var shift = 10
  var save = '{r0-r3}'
  put """
    ldr  $temp, =123
    lsls $temp, #$shift
    push $save
  """
.end