Quickest way to do an If val1 = val2 with Word variables


Results 1 to 14 of 14

Threaded View

  1. #11
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    The separate IF/THEN "templates" make it quicker.

    When you have multiple AND's/OR's/XORNOT's etc. on the same line, then intermediate variables (T1+) are used to keep track of each "Term".
    And T1+ variables are WORDs (LONGs for PBPL).
    So while it looks shorter in the code listing, it really takes longer.<hr>

    Well, I was trying to keep it straight PBP.
    Which is why the previous example only got a "FASTer" rating.

    But, if you want the "FASTest", ya gotta drop down to ASM with bank0/system variables.

    Code:
    val1   VAR WORD BANK0 SYSTEM
    val2   VAR WORD BANK0 SYSTEM
    
    ASM
        movf    val1+1, W
        subwf   val2+1, W
        btfss   STATUS, Z
        goto    NotEqual
        movf    val1, W
        subwf   val2, W
        btfss   STATUS, Z
        goto    NotEqual
        L?GOTO  _UserRoutine  ; val1 = val2
    NotEqual
    ENDASM
    
    
    UserRoutine:
    ;... yadda yadda ...
    Of course, someone will probably find a "FASTest.er" way ... I hope. <hr>

    ADDED:
    The above can only be used once without modification.
    But if you turn it into a Macro, it can be used multiple times, with different variables. (as long as they're in bank0)

    Code:
    val1   VAR WORD BANK0 SYSTEM
    val2   VAR WORD BANK0 SYSTEM
    
    ASM
    DT_EQUAL  macro v1, v2, label
      local NotEqual
        movf    v1+1, W
        subwf   v2+1, W
        btfss   STATUS, Z
        goto    NotEqual
        movf    v1, W
        subwf   v2, W
        btfss   STATUS, Z
        goto    NotEqual
        L?GOTO  label  ; v1 = v2
    NotEqual
      endm
    ENDASM
    
    ;--- usage -------------------------
    @ DT_EQUAL  val1, val2, _UserRoutine  ; IF val1 = val2 THEN UserRoutine
    
    
    UserRoutine:
    ;... yadda yadda ...
    hth,
    Last edited by Darrel Taylor; - 23rd April 2010 at 02:24. Reason: ADD: macro
    DT

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts