title: Arm Asm Double Register Immediates
body: <p>I have an assignment requiring an Ln-algorithm written in armasm. I decided to use the BKM algorithm. The algorithm uses a lookUp table. The assignment requires to implement lookup tables in asm as well. The problem is that I'm getting an immediateOutOfBounds Error or garbageFollowingInstruction Error when compiling, even on immediates like <em>VMOV.f64 d2, #0.0</em>. On my other asm-Functions these Operations work fine</p>
  
  <p>This is the code:</p>
  
  <pre><code>.global bkm_assembly
  
  bkm_assembly:
      // r0 -&gt; Adresse des Arguments dessen ln berechnet werden soll
      // r1 -&gt; Adresse des LookUpTables
      // d0 -&gt; e
      // d1 -&gt; Argument
      // d2 -&gt; Result
      // d3 -&gt; Buffer for addition
      // r4 -&gt; Buffer for LookupCalculation
  
      push {r4-r8, lr}
      b FillTablef
  
  algorithm:
      VMOV.f64 d0, #2.718281828459045235360287471352662497757247093699959574966967627724076
      VLDR.f64 d1, [r0]
      VMOV.f64 d2, #0.0
  
  algorithmArgBiggerE:
      //Divide Argument by e while Argument &gt; e, add 1 each time
      VCMP.f64 d1, d0
      VMRS APSR_nzcv, FPSCR//get the Flags to be used by branch
      BLS algotithmArgSmallerEf
      VDIV.f64 d1, d1, d2
      VMOV.f64 d3, #1.0
      VADD.f64 d2, d2, d3
      B algorithmArgBiggerEb
  
  algorithmArgSmallerE:
      //Main BKM Execution
      // d4 -&gt; x
      // d5 -&gt; s
      // d6 -&gt; z
      // r2 -&gt; k
      // r3 -&gt; N
  
      MOV r3, #53
      VMOV.f64 d4, #1.0
      VMOV.f64 d5, #1.0
      MOV r2, #0
  
  ForLoopBegin:
      CMP r3, r2
      BHS ForLoopEndf
      VMUL.f64 d6, d4, d5
      VADD.f64 d6, d6, d4
      //IF Condition
      VCMP.f64 d6, d1
      VMRS APSR_nzcv, FPSCR//get the Flags to be used by branch
      BLS EndIff
      VMOV.f64 d4, d6
      //clalculate LookUpAdress
      ADD r4, r1, r2, LSL #2
      VLDR.f64 d3, [r4]
      VADD.f64 d2, d2, d3
  EndIf:
      VMOV.f64 d3, #2.0
      VDIV.f64 d5, d5, d3
      B ForLoopBeginb
  
  ForLoopEnd:
      B EXITf
  
  
  
  
  
  
  FillTable:
      // d2 -&gt; Aktueller Wert zum befüllen des Lookups
      //Fill the Lookuptable
      LDR R1, =LookUp
      VMOV.f64 d2, #0.693147180559945297099404706000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.405465108108164392935428259000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.223143551314209769962616701000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.117783035656383447138088388000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.060624621816434840186291518000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.030771658666753686222134530000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.015504186535965253358272343000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.007782140442054949100825041000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.003898640415657322636221046000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.001951220131261749216850870000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000976085973055458892686544000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000488162079501351186957460000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000244110827527362687853374000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000122062862525677363338881000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000061033293680638525913091000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000030517112473186377476993000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000015258672648362398138404000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000007629365427567572417821000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000003814689989685889381171000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000001907346813825409407938000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000953673861659188260005000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000476837044516323000000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000238418550679858000000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000119209282445354000000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000059604642999033900000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000029802321943606100000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000014901161082825400000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000007450580569168250000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000003725290291523020000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000001862645147496230000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000931322574181798000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000465661287199319000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000232830643626765000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000116415321820159000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000058207660911773300000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000029103830456310200000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000014551915228261000000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000007275957614156960000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000003637978807085100000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000001818989403544200000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000909494701772515000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000454747350886361000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000227373675443206000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000113686837721610000
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000056843418860806400
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000028421709430403600
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000014210854715201900
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000007105427357600980
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000003552713678800490
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000001776356839400250
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000888178419700125
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000444089209850063
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000222044604925031
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000111022302462516
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000055511151231258
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000027755575615629
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000013877787807815
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000006938893903907
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000003469446951954
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000001734723475977
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000867361737988
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000433680868994
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000216840434497
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000108420217249
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000054210108624
      VSTR.f64 d2, [r1]
      ADD R1, R1, #8
      VMOV.f64 d2, #0.000000000000000000027105054312
      VSTR.f64 d2, [r1]
      B   algorithmb
  
  
  EXIT:
      pop {r4-r8, pc}
  
  
  
  
  .data
  .balign 4
  LookUp:     .skip   528 //Array for the lookuptable
  </code></pre>
  
  <p>Thanks in advance</p>