Changeset 16748


Ignore:
Timestamp:
Jun 3, 2016, 4:30:24 PM (5 years ago)
Author:
gb
Message:

Don't define ARMv7 instructions as lap macros.
Do define several of them as instructions.

Location:
trunk/source/compiler/ARM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/ARM/arm-asm.lisp

    r16685 r16748  
    181181(defparameter *arm-instruction-table*
    182182  (vector
     183
     184   (define-arm-instruction vmul.f32 (:dd :dn :dm)
     185     #xf3000d10
     186     #xffa00f10
     187     (:non-conditional))
     188
     189
     190;;; UUOs.
     191
     192;;; Nullary UUOs
     193   (define-arm-instruction uuo-alloc-trap ()
     194     #x07f000f0
     195     #x0fffffff
     196     (:prefer-separate-cond))
     197   (define-arm-instruction uuo-error-wrong-nargs ()
     198     #x07f001f8
     199     #x0fffffff
     200     (:prefer-separate-cond))
     201   (define-arm-instruction uuo-gc-trap ()
     202     #x07f002f0
     203     #x0fffffff
     204     (:prefer-separate-cond))
     205   (define-arm-instruction uuo-debug-trap ()
     206     #x07f003f0
     207     #x0fffffff
     208     (:prefer-separate-cond))
     209   (define-arm-instruction uuo-interrupt-now ()
     210     #x07f004f0
     211     #x0fffffff
     212     (:prefer-separate-cond))
     213   (define-arm-instruction uuo-suspend-now ()
     214     #x07f005f0
     215     #x0fffffff
     216     (:prefer-separate-cond))
     217;;; Misc format
     218   (define-arm-instruction uuo-error-reg-not-lisptag (:uuoA :uuo-unary)
     219     #x07f000f2
     220     #x0ff000ff
     221     (:prefer-separate-cond))
     222   (define-arm-instruction uuo-error-reg-not-fulltag (:uuoA :uuo-unary)
     223     #x07f000f3
     224     #x0ff000ff
     225     (:prefer-separate-cond))
     226   (define-arm-instruction uuo-error-reg-not-xtype (:uuoA :uuo-unary)
     227     #x07f000f4
     228     #x0ff000ff
     229     (:prefer-separate-cond))
     230   (define-arm-instruction uuo-cerror-reg-not-lisptag (:uuoA :uuo-unary)
     231     #x07f000fa
     232     #x0ff000ff
     233     (:prefer-separate-cond))
     234   (define-arm-instruction uuo-cerror-reg-not-fulltag (:uuoA :uuo-unary)
     235     #x07f000fb
     236     #x0ff000ff
     237     (:prefer-separate-cond))
     238   (define-arm-instruction uuo-cerror-reg-not-xtype (:uuoA :uuo-unary)
     239     #x07f000fc
     240     #x0ff000ff
     241     (:prefer-separate-cond))
     242
     243;;; Unary UUOs
     244   (define-arm-instruction uuo-error-unbound (:uuoA)
     245     #x07f000f9
     246     #x0ffff0ff
     247     (:prefer-separate-cond))
     248   (define-arm-instruction uuo-cerror-unbound (:uuoA)
     249     #x07f010f9
     250     #x0ffff0ff
     251     (:prefer-separate-cond))
     252   (define-arm-instruction uuo-error-not-callable (:uuoA)
     253     #x07f020f9
     254     #x0ffff0ff
     255     (:prefer-separate-cond))
     256   (define-arm-instruction uuo-tlb-too-small (:uuoA)
     257     #x07f030f1
     258     #x0ffff0ff
     259     (:prefer-separate-cond))
     260   (define-arm-instruction uuo-error-no-throw-tag (:uuoA)
     261     #x07f040f9
     262     #x0ffff0ff
     263     (:prefer-separate-cond))
     264   (define-arm-instruction uuo-error-udf-call (:uuoA)
     265     #x07f050f9
     266     #x0ffff0ff
     267     (:prefer-separate-cond))
     268   (define-arm-instruction uuo-error-udf (:uuoA)
     269     #x07f060f9
     270     #x0ffff0ff
     271     (:prefer-separate-cond))
     272   
     273;;; Binary UUOs
     274   (define-arm-instruction uuo-error-vector-bounds (:uuoA :uuoB)
     275     #x07f000ff
     276     #x0fff00ff
     277     (:prefer-separate-cond))
     278   (define-arm-instruction uuo-error-array-bounds (:uuoA :uuoB)
     279     #x07f100ff
     280     #x0fff00ff
     281     (:prefer-separate-cond))
     282   (define-arm-instruction uuo-error-integer-divide-by-zero (:uuoA :uuoB)
     283     #x07f200ff
     284     #x0fff00ff
     285     (:prefer-separate-cond))
     286   (define-arm-instruction uuo-error-slot-unbound (:uuoA :uuoB :uuoC)
     287     #x07f000fe
     288     #x0ff000ff
     289     (:prefer-separate-cond))
     290   (define-arm-instruction uuo-eep-unresolved (:uuoA :uuoB)
     291     #x07f400ff
     292     #x0fff00ff
     293     (:prefer-separate-cond))
     294   (define-arm-instruction uuo-fpu-exception (:uuoA :uuoB)
     295     #x07f500ff
     296     #x0fff00ff
     297     (:prefer-separate-cond))
     298   (define-arm-instruction uuo-error-array-rank (:uuoA :uuoB)
     299     #x07f600ff
     300     #x0fff00ff
     301     (:prefer-separate-cond))
     302   (define-arm-instruction uuo-error-array-flags (:uuoA :uuoB)
     303     #x07f700ff
     304     #x0fff00ff
     305     (:prefer-separate-cond))
     306   (define-arm-instruction uuo-error-array-axis-bounds (:uuoC :uuoB :uuoA)
     307     #x07f000f5
     308     #x0ff000ff
     309     (:prefer-separate-cond))
     310   ;; Kernel services.
     311   (define-arm-instruction uuo-kernel-service (:uuo-unary)
     312     #x07f000fd
     313     #x0fff00ff
     314     (:prefer-separate-cond))
     315
    183316   #||
     317   ;; movw, movt require ARMv6T2 or later
     318   (define-arm-instruction movw (:rd :imm16)
     319     #x03000000
     320     #x0ff00000
     321     ())
     322   (define-arm-instruction movt (:rd :imm16)
     323     #x03400000
     324     #x0ff00000
     325     ())
     326   ;; This canonical NOP also requires ARMv6T2 or later.
     327   (define-arm-instruction nop ()
     328     #x0320f000
     329     #x0fffffff
     330     ())
     331   ||#
     332
     333   (define-arm-instruction and (:rd :rn :shifter)
     334     #x00000000
     335     ((#x02000000 . #x0ff00000)
     336      (#x00000000 . #x0ff00010)
     337      (#x00000010 . #x0ff00090))
     338     ())
     339   (define-arm-instruction ands (:rd :rn :shifter)
     340     #x00100000
     341     ((#x02100000 . #x0ff00000)
     342      (#x00100000 . #x0ff00010)
     343      (#x00100010 . #x0ff00090))
     344     ())
     345   (define-arm-instruction eor (:rd :rn :shifter)
     346     #x00200000
     347     ((#x02200000 . #x0ff00000)
     348      (#x00200000 . #x0ff00010)
     349      (#x00200010 . #x0ff00090))
     350     ())
     351   (define-arm-instruction eors (:rd :rn :shifter)
     352     #x00300000
     353     ((#x02300000 . #x0ff00000)
     354      (#x00300000 . #x0ff00010)
     355      (#x00300010 . #x0ff00090))
     356     ())
     357   (define-arm-instruction sub (:rd :rn :shifter)
     358     #x00400000
     359     ((#x02400000 . #x0ff00000)
     360      (#x00400000 . #x0ff00010)
     361      (#x00400010 . #x0ff00090))
     362     ())
     363   (define-arm-instruction subs (:rd :rn :shifter)
     364     #x00500000
     365     ((#x02500000 . #x0ff00000)
     366      (#x00500000 . #x0ff00010)
     367      (#x00500010 . #x0ff00090))
     368     ())
     369   (define-arm-instruction rsb (:rd :rn :shifter)
     370     #x00600000
     371     ((#x02600000 . #x0ff00000)
     372      (#x00600000 . #x0ff00010)
     373      (#x00600010 . #x0ff00090))
     374     ())
     375   (define-arm-instruction rsbs (:rd :rn :shifter)
     376     #x00700000
     377     ((#x02700000 . #x0ff00000)
     378      (#x00700000 . #x0ff00010)
     379      (#x00700010 . #x0ff00090))
     380     ())   
     381   (define-arm-instruction add (:rd :rn :shifter)
     382     #x00800000
     383     ((#x02800000 . #x0ff00000)
     384      (#x00800000 . #x0ff00010)
     385      (#x00800010 . #x0ff00090))
     386     ())
     387   (define-arm-instruction adds (:rd :rn :shifter)
     388     #x00900000
     389     ((#x02900000 . #x0ff00000)
     390      (#x00900000 . #x0ff00010)
     391      (#x00900010 . #x0ff00090))
     392     ())
     393
     394   (define-arm-instruction adc (:rd :rn :shifter)
     395     #x00a00000
     396     ((#x02a00000 . #x0ff00000)
     397      (#x00a00000 . #x0ff00010)
     398      (#x00a00010 . #x0ff00090))
     399     ())
     400   (define-arm-instruction adcs (:rd :rn :shifter)
     401     #x00b00000
     402     ((#x02b00000 . #x0ff00000)
     403      (#x00b00000 . #x0ff00010)
     404      (#x00b00010 . #x0ff00090))
     405     ())
     406   (define-arm-instruction sbc (:rd :rn :shifter)
     407     #x00c00000
     408     ((#x02c00000 . #x0ff00000)
     409      (#x00c00000 . #x0ff00010)
     410      (#x00c00010 . #x0ff00090))
     411     ())
     412   (define-arm-instruction sbcs (:rd :rn :shifter)
     413     #x00d00000
     414     ((#x02d00000 . #x0ff00000)
     415      (#x00d00000 . #x0ff00010)
     416      (#x00d00010 . #x0ff00090))
     417     ())
     418   (define-arm-instruction rsc (:rd :rn :shifter)
     419     #x00e00000
     420     ((#x02e00000 . #x0ff00000)
     421      (#x00e00000 . #x0ff00010)
     422      (#x00e00010 . #x0ff00090))
     423     ())
     424   (define-arm-instruction rscs (:rd :rn :shifter)
     425     #x00f00000
     426     ((#x02f00000 . #x0ff00000)
     427      (#x00f00000 . #x0ff00010)
     428      (#x00f00010 . #x0ff00090))
     429     ())
     430   (define-arm-instruction tst (:rn :shifter)
     431     #x01100000
     432     ((#x03100000 . #x0ff00000)
     433      (#x01100000 . #x0ff00010)
     434      (#x01100010 . #x0ff00090))
     435     ())
     436   (define-arm-instruction tsts (:rn :shifter)
     437     #x01100000
     438     ((#x03100000 . #x0ff00000)
     439      (#x01100000 . #x0ff00010)
     440      (#x01100010 . #x0ff00090))
     441     ())
     442   (define-arm-instruction orr (:rd :rn :shifter)
     443     #x01800000
     444     ((#x03800000 . #x0ff00000)
     445      (#x01800000 . #x0ff00010)
     446      (#x01800010 . #x0ff00090))
     447     ())
     448   (define-arm-instruction orrs (:rd :rn :shifter)
     449     #x01900000
     450     ((#x03900000 . #x0ff00000)
     451      (#x01900000 . #x0ff00010)
     452      (#x01900010 . #x0ff00090))
     453     ())
     454   (define-arm-instruction bic (:rd :rn :shifter)
     455     #x01c00000
     456     ((#x03c00000 . #x0ff00000)
     457      (#x01c00000 . #x0ff00010)
     458      (#x01c00010 . #x0ff00090))
     459     ())
     460   (define-arm-instruction bics (:rd :rn :shifter)
     461     #x01d00000
     462     ((#x03d00000 . #x0ff00000)
     463      (#x01d00000 . #x0ff00010)
     464      (#x01d00010 . #x0ff00090))
     465     ())
     466   (define-arm-instruction cmp (:rn :shifter)
     467     #x01500000
     468     ((#x03500000 . #x0ff00000)
     469      (#x01500000 . #x0ff00010)
     470      (#x01500010 . #x0ff00090))
     471     ())
     472   (define-arm-instruction cmps (:rn :shifter)
     473     #x01500000
     474     ((#x03500000 . #x0ff00000)
     475      (#x01500000 . #x0ff00010)
     476      (#x01500010 . #x0ff00090))
     477     ())
     478   (define-arm-instruction cmn (:rd :shifter)
     479     #x01700000
     480     ((#x03700000 . #x0ff00000)
     481      (#x01700000 . #x0ff00010)
     482      (#x01700010 . #x0ff00090))
     483     ())
     484
     485   (define-arm-instruction cmns (:rd :shifter)
     486     #x01700000
     487     ((#x03700000 . #x0ff00000)
     488      (#x01700000 . #x0ff00010)
     489      (#x01700010 . #x0ff00090))
     490     ())
     491   
     492   (define-arm-instruction nop ()
     493     #x01a00000
     494     #x0fffffff
     495     ())
     496   
     497   (define-arm-instruction mov (:rd :shifter)
     498     #x01a00000
     499     ((#x03a00000 . #x0ff00000)
     500      (#x01a00000 . #x0ff00010)
     501      (#x01a00010 . #x0ff00090))
     502     ())
     503   (define-arm-instruction movs (:rd :shifter)
     504     #x01b00000
     505     ((#x03b00000 . #x0ff00000)
     506      (#x01b00000 . #x0ff00010)
     507      (#x01b00010 . #x0ff00090))
     508     ())
     509   (define-arm-instruction mvn (:rd :shifter)
     510     #x01e00000
     511     ((#x03e00000 . #x0ff00000)
     512      (#x01e00000 . #x0ff00010)
     513      (#x01e00010 . #x0ff00090))
     514     ())
     515   (define-arm-instruction mvns (:rd :shifter)
     516     #x01f00000
     517     ((#x03f00000 . #x0ff00000)
     518      (#x01f00000 . #x0ff00010)
     519      (#x01f00010 . #x0ff00090))
     520     ())
     521   (define-arm-instruction vpop1 (:rd)
     522     #x049a0004
     523     #x0fff0fff
     524     ())
     525   (define-arm-instruction spjump (:spentry)
     526     #x0593f000
     527     #x0ffff000
     528     ())
     529   (define-arm-instruction sploadlr (:spentry)
     530     #x0593e000
     531     #x0ffff000
     532     ())
     533   (define-arm-instruction ldr (:rd :mem12)
     534     #x04100000
     535     #x0c500000
     536     ())
     537   (define-arm-instruction ldrb (:rd :mem12)
     538     #x04500000
     539     #x0c500000
     540     ())
     541   (define-arm-instruction vpush1 (:rd)
     542     #x052a0004
     543     #x0fff0fff
     544     ())
     545   (define-arm-instruction str (:rd :mem12)
     546     #x04000000
     547     #x0c500000
     548     ())
     549   (define-arm-instruction strb (:rd :mem12)
     550     #x04400000
     551     #x0c500000
     552     ())
     553   (define-arm-instruction ldrh (:rd :mem8)
     554     #x001000b0
     555     #x0e3000f0
     556     ())
     557   (define-arm-instruction strh (:rd :mem8)
     558     #x000000b0
     559     #x0e3000f0
     560     ())
     561   (define-arm-instruction ldrsh (:rd :mem8)
     562     #x001000f0
     563     #x0e3000f0
     564     ())
     565   (define-arm-instruction ldrsb (:rd :mem8)
     566     #x001000d0
     567     #x0e3000f0
     568     ())
     569   (define-arm-instruction ldrd  (:rde :mem8)
     570     #x000000d0
     571     #x0e1000f0
     572     ())
     573   (define-arm-instruction strd  (:rde :mem8)
     574     #x000000f0
     575     #x0e1000f0
     576     ())
     577
     578   (define-arm-instruction mul (:rn :rm :rs)
     579     #x00000090
     580     #x0ff000f0
     581     ())
     582   (define-arm-instruction muls (:rn :rm :rs)
     583     #x00100090
     584     #x0ff000f0
     585     ())
     586
     587   (define-arm-instruction mla (:rn :rm :rs :rd)
     588     #x00200090
     589     #x0ff000f0
     590     ())
     591   (define-arm-instruction mlas (:rn :rm :rs :rd)
     592     #x00300090
     593     #x0ff000f0
     594     ())
     595   
     596   (define-arm-instruction stm (:rnw :reglist)
     597     #x08800000
     598     #x0fd00000
     599     ())
     600   (define-arm-instruction stmia (:rnw :reglist)
     601     #x08800000
     602     #x0fd00000
     603     ())
     604   (define-arm-instruction stmea (:rnw :reglist)
     605     #x08800000
     606     #x0fd00000
     607     ())
     608   (define-arm-instruction ldmia (:rnw :reglist)
     609     #x08900000
     610     #x0fd00000
     611     ())
     612   (define-arm-instruction ldm (:rnw :reglist)
     613     #x08900000
     614     #x0fd00000
     615     ())
     616   (define-arm-instruction ldmfd (:rnw :reglist)
     617     #x08900000
     618     #x0fd00000
     619     ())
     620   (define-arm-instruction stmdb (:rnw :reglist)
     621     #x09000000
     622     #x0fd00000
     623     ())
     624   (define-arm-instruction stmfb (:rnw :reglist)
     625     #x09000000
     626     #x0fd00000
     627     ())
     628   (define-arm-instruction stmfd (:rnw :reglist)
     629     #x09000000
     630     #x0ff00000
     631     ())
     632   (define-arm-instruction ldmdb (:rnw :reglist)
     633     #x09100000
     634     #x0fd00000
     635     ())
     636   (define-arm-instruction ldmea (:rnw :reglist)
     637     #x09100000
     638     #x0fd00000
     639     ())
     640
     641   (define-arm-instruction b (:b)
     642     #x0a000000
     643     #x0f000000
     644     ())
     645   (define-arm-instruction bl (:b)
     646     #x0b000000
     647     #x0f000000
     648     ())
     649 
     650   (define-arm-instruction bx (:rm)
     651     #x012fff10
     652     #x0ffffff0
     653     ())
     654   (define-arm-instruction blx (:rm)
     655     #x012fff30
     656     #x0ffffff0
     657     ())
     658
     659;;; VFP instructions
     660   (define-arm-instruction fabsd (:dd :dm)
     661     #x0eb00bc0
     662     #x0fff0ff0
     663     ())
     664   (define-arm-instruction fabss (:sd :sm)
     665     #x0eb00ac0
     666     #x0fbf0fd0
     667     ())
     668   (define-arm-instruction fnegd (:dd :dm)
     669     #x0eb10b40
     670     #x0fff0ff0
     671     ())
     672   (define-arm-instruction fnegs (:sd :sm)
     673     #x0eb10a40
     674     #x0fbf0fd0
     675     ())
     676   (define-arm-instruction fsqrtd (:dd :dm)
     677     #x0eb10bc0
     678     #x0fff0ff0
     679     ())
     680   (define-arm-instruction fsqrts (:sd :sm)
     681     #x0eb10ac0
     682     #x0bff0fb0
     683     ())   
     684   (define-arm-instruction faddd (:dd :dn :dm)
     685     #x0e300b00
     686     #x0ff00ff0
     687     ())
     688   (define-arm-instruction fadds (:sd :sn :sm)
     689     #x0e300a00
     690     #x0f300f50
     691     ())
     692   (define-arm-instruction fmsr (:sn :rd)
     693     #x0e000a10
     694     #x0ff00f7f
     695     ())
     696   (define-arm-instruction fmrs (:rd :sn)
     697     #x0e100a10
     698     #x0ff00f7f
     699     ())
     700   (define-arm-instruction fmrrd (:rd :rn :dm)
     701     #x0c500b10
     702     #x0ff00ff0
     703     ())
     704   (define-arm-instruction fmdrr (:dm :rd :rn)
     705     #x0c400b10
     706     #x0ff00ff0
     707     ())
     708   (define-arm-instruction fsitod (:dd :sm)
     709     #x0eb80bc0
     710     #x0fbf0fc0
     711     ())
     712   (define-arm-instruction fsitos (:sd :sm)
     713     #x0eb80ac0
     714     #x0fbf0fc0
     715     ())
     716   (define-arm-instruction fcmped (:dd :dm)
     717     #x0eb40bc0
     718     #x0fff0fc0
     719     ())
     720   (define-arm-instruction fcmpes (:sd :sm)
     721     #x0eb40ac0
     722     #x0fff0fc0
     723     ())
     724   (define-arm-instruction fmstat ()
     725     #x0ef1fa10
     726     #x0fffffff
     727     ())
     728   (define-arm-instruction fsubd (:dd :dn :dm)
     729     #x0e300b40
     730     #x0fb00f50
     731     ())
     732   (define-arm-instruction fsubs (:sd :sn :sm)
     733     #x0e300a40
     734     #x0fb00f50
     735     ())
     736   (define-arm-instruction fmuld (:dd :dn :dm)
     737     #x0e200b00
     738     #x0ff00ff0
     739     ())
     740   (define-arm-instruction fmuls (:sd :sn :sm)
     741     #x0e200a00
     742     #x0fb00f50
     743     ())
     744   (define-arm-instruction fdivd (:dd :dn :dm)
     745     #x0e800b00
     746     #x0fb00ff0
     747     ())
     748   (define-arm-instruction fdivs (:sd :sn :sm)
     749     #x0e800a00
     750     #x0fb00f50
     751     ())
     752
     753   (define-arm-instruction fmacd (:dd :dn :dm)
     754     #x0e000b00
     755     #x0fb00f50
     756     ())
     757   (define-arm-instruction fmacs (:sd :sn :sm)
     758     #x0e000a00
     759     #x0fb00f50
     760     ())
     761
     762   (define-arm-instruction fcpyd (:dd :dm)
     763     #x0eb00b40
     764     #x0fbf0ff0
     765     ())
     766   (define-arm-instruction fcpys (:sd :sm)
     767     #x0eb00a40
     768     #x0fbf0fc0
     769     ())
     770   (define-arm-instruction fcvtsd (:sd :dm)
     771     #x0eb70bc0
     772     #x0fbf0ff0
     773     ())
     774   (define-arm-instruction fcvtds (:dd :sm)
     775     #x0eb70ac0
     776     #x0ff70ac0
     777     ())
     778   (define-arm-instruction fmxr (:fpux :rd)
     779     #x0ee00a10
     780     #x0ff00fff
     781     ())
     782   (define-arm-instruction fmrx (:rd :fpux)
     783     #x0ef00a10
     784     #x0ff00fff
     785     ())
     786   (define-arm-instruction smull (:rd :rn :rm :rs)
     787     #x00c00090
     788     #x0ff000f0
     789     ())
     790   (define-arm-instruction smulls (:rd :rn :rm :rs)
     791     #x00d00090
     792     #x0ff000f0
     793     ())
     794   (define-arm-instruction umull (:rd :rn :rm :rs)
     795     #x00800090
     796     #x0ff000f0
     797     ())
     798   (define-arm-instruction umulls (:rd :rn :rm :rs)
     799     #x00900090
     800     #x0ff000f0
     801     ())
     802
     803   (define-arm-instruction fstd (:dd :fpaddr)
     804     #x0d000b00
     805     #x0f700f00
     806     ())
     807   (define-arm-instruction fsts (:sd :fpaddr)
     808     #x0d000a00
     809     #x0f300f00
     810     ())
     811   (define-arm-instruction fstmdbs (:sd :rnw :srcount)
     812     #x0d200a00
     813     #x0fb00f00
     814     ())
     815   (define-arm-instruction fstmias (:sd :rnw :srcount)
     816     #x0c800a00
     817     #x0fd00f00
     818     ())
     819   (define-arm-instruction fstmdbd (:dd :rnw :drcount)
     820     #x0d200b00
     821     #x0ff00f00
     822     ())
     823   (define-arm-instruction fstmiad (:dd :rnw :drcount)
     824     #x0c800b00
     825     #x0fd00f00
     826     ())
     827   (define-arm-instruction fldd (:dd :fpaddr)
     828     #x0d100b00
     829     #x0f700f00
     830     ())     
     831   (define-arm-instruction flds (:sd :fpaddr)
     832     #x0d100a00
     833     #x0f300f00
     834     ())
     835   (define-arm-instruction fldmias (:sd :rnw :srcount)
     836     #x0c900a00
     837     #x0f900f00
     838     ())
     839   (define-arm-instruction fldmiad (:dd :rnw :drcount)
     840     #x0c900b00
     841     #x0f900f00
     842     ())     
     843   (define-arm-instruction ftosid (:sd :dm)
     844     #x0ebd0b40
     845     #x0fbf0fc0
     846     ())
     847   (define-arm-instruction ftosizd (:sd :dm)
     848     #x0ebd0bc0
     849     #x0fbf0fc0
     850     ())
     851   (define-arm-instruction ftosis (:sd :sm)
     852     #x0ebd0a40
     853     #x0fbf0fc0
     854     ())
     855   (define-arm-instruction ftosizs (:sd :sm)
     856     #x0ebd0ac0
     857     #x0fbf0fc0
     858     ())   
     859   (define-arm-instruction ldrex (:rd :@rn)
     860     #x01900f9f
     861     #x0ff00fff
     862     ())
     863   (define-arm-instruction strex (:rd :rm :@rn)
     864     #x01800f90
     865     #x0ff00ff0
     866     ())
     867   (define-arm-instruction clz (:rd :rm)
     868     #x016f0f10
     869     #x0fff0ff0
     870     ())
     871
    184872   ;; CLREX requires ARMv6T2 or later.  The memory-barrier instructions
    185873   ;; require ARMv7.
     
    200888     #xffffffff
    201889     (:non-conditional))
    202    ||#
    203 
    204    (define-arm-instruction vmul.f32 (:dd :dn :dm)
    205      #xf3000d10
    206      #xffa00f10
    207      (:non-conditional))
    208 
    209 
    210 ;;; UUOs.
    211 
    212 ;;; Nullary UUOs
    213    (define-arm-instruction uuo-alloc-trap ()
    214      #x07f000f0
     890   (define-arm-instruction wfe ()
     891     #x0320f002
    215892     #x0fffffff
    216      (:prefer-separate-cond))
    217    (define-arm-instruction uuo-error-wrong-nargs ()
    218      #x07f001f8
     893     ())
     894   (define-arm-instruction sev ()
     895     #x0320f004
    219896     #x0fffffff
    220      (:prefer-separate-cond))
    221    (define-arm-instruction uuo-gc-trap ()
    222      #x07f002f0
    223      #x0fffffff
    224      (:prefer-separate-cond))
    225    (define-arm-instruction uuo-debug-trap ()
    226      #x07f003f0
    227      #x0fffffff
    228      (:prefer-separate-cond))
    229    (define-arm-instruction uuo-interrupt-now ()
    230      #x07f004f0
    231      #x0fffffff
    232      (:prefer-separate-cond))
    233    (define-arm-instruction uuo-suspend-now ()
    234      #x07f005f0
    235      #x0fffffff
    236      (:prefer-separate-cond))
    237 ;;; Misc format
    238    (define-arm-instruction uuo-error-reg-not-lisptag (:uuoA :uuo-unary)
    239      #x07f000f2
    240      #x0ff000ff
    241      (:prefer-separate-cond))
    242    (define-arm-instruction uuo-error-reg-not-fulltag (:uuoA :uuo-unary)
    243      #x07f000f3
    244      #x0ff000ff
    245      (:prefer-separate-cond))
    246    (define-arm-instruction uuo-error-reg-not-xtype (:uuoA :uuo-unary)
    247      #x07f000f4
    248      #x0ff000ff
    249      (:prefer-separate-cond))
    250    (define-arm-instruction uuo-cerror-reg-not-lisptag (:uuoA :uuo-unary)
    251      #x07f000fa
    252      #x0ff000ff
    253      (:prefer-separate-cond))
    254    (define-arm-instruction uuo-cerror-reg-not-fulltag (:uuoA :uuo-unary)
    255      #x07f000fb
    256      #x0ff000ff
    257      (:prefer-separate-cond))
    258    (define-arm-instruction uuo-cerror-reg-not-xtype (:uuoA :uuo-unary)
    259      #x07f000fc
    260      #x0ff000ff
    261      (:prefer-separate-cond))
    262 
    263 ;;; Unary UUOs
    264    (define-arm-instruction uuo-error-unbound (:uuoA)
    265      #x07f000f9
    266      #x0ffff0ff
    267      (:prefer-separate-cond))
    268    (define-arm-instruction uuo-cerror-unbound (:uuoA)
    269      #x07f010f9
    270      #x0ffff0ff
    271      (:prefer-separate-cond))
    272    (define-arm-instruction uuo-error-not-callable (:uuoA)
    273      #x07f020f9
    274      #x0ffff0ff
    275      (:prefer-separate-cond))
    276    (define-arm-instruction uuo-tlb-too-small (:uuoA)
    277      #x07f030f1
    278      #x0ffff0ff
    279      (:prefer-separate-cond))
    280    (define-arm-instruction uuo-error-no-throw-tag (:uuoA)
    281      #x07f040f9
    282      #x0ffff0ff
    283      (:prefer-separate-cond))
    284    (define-arm-instruction uuo-error-udf-call (:uuoA)
    285      #x07f050f9
    286      #x0ffff0ff
    287      (:prefer-separate-cond))
    288    (define-arm-instruction uuo-error-udf (:uuoA)
    289      #x07f060f9
    290      #x0ffff0ff
    291      (:prefer-separate-cond))
    292    
    293 ;;; Binary UUOs
    294    (define-arm-instruction uuo-error-vector-bounds (:uuoA :uuoB)
    295      #x07f000ff
    296      #x0fff00ff
    297      (:prefer-separate-cond))
    298    (define-arm-instruction uuo-error-array-bounds (:uuoA :uuoB)
    299      #x07f100ff
    300      #x0fff00ff
    301      (:prefer-separate-cond))
    302    (define-arm-instruction uuo-error-integer-divide-by-zero (:uuoA :uuoB)
    303      #x07f200ff
    304      #x0fff00ff
    305      (:prefer-separate-cond))
    306    (define-arm-instruction uuo-error-slot-unbound (:uuoA :uuoB :uuoC)
    307      #x07f000fe
    308      #x0ff000ff
    309      (:prefer-separate-cond))
    310    (define-arm-instruction uuo-eep-unresolved (:uuoA :uuoB)
    311      #x07f400ff
    312      #x0fff00ff
    313      (:prefer-separate-cond))
    314    (define-arm-instruction uuo-fpu-exception (:uuoA :uuoB)
    315      #x07f500ff
    316      #x0fff00ff
    317      (:prefer-separate-cond))
    318    (define-arm-instruction uuo-error-array-rank (:uuoA :uuoB)
    319      #x07f600ff
    320      #x0fff00ff
    321      (:prefer-separate-cond))
    322    (define-arm-instruction uuo-error-array-flags (:uuoA :uuoB)
    323      #x07f700ff
    324      #x0fff00ff
    325      (:prefer-separate-cond))
    326    (define-arm-instruction uuo-error-array-axis-bounds (:uuoC :uuoB :uuoA)
    327      #x07f000f5
    328      #x0ff000ff
    329      (:prefer-separate-cond))
    330    ;; Kernel services.
    331    (define-arm-instruction uuo-kernel-service (:uuo-unary)
    332      #x07f000fd
    333      #x0fff00ff
    334      (:prefer-separate-cond))
    335 
    336    #||
    337    ;; movw, movt require ARMv6T2 or later
    338    (define-arm-instruction movw (:rd :imm16)
    339      #x03000000
    340      #x0ff00000
    341      ())
    342    (define-arm-instruction movt (:rd :imm16)
    343      #x03400000
    344      #x0ff00000
    345      ())
    346    ;; This canonical NOP also requires ARMv6T2 or later.
    347    (define-arm-instruction nop ()
    348      #x0320f000
    349      #x0fffffff
    350      ())
    351    ||#
    352 
    353    (define-arm-instruction and (:rd :rn :shifter)
    354      #x00000000
    355      ((#x02000000 . #x0ff00000)
    356       (#x00000000 . #x0ff00010)
    357       (#x00000010 . #x0ff00090))
    358      ())
    359    (define-arm-instruction ands (:rd :rn :shifter)
    360      #x00100000
    361      ((#x02100000 . #x0ff00000)
    362       (#x00100000 . #x0ff00010)
    363       (#x00100010 . #x0ff00090))
    364      ())
    365    (define-arm-instruction eor (:rd :rn :shifter)
    366      #x00200000
    367      ((#x02200000 . #x0ff00000)
    368       (#x00200000 . #x0ff00010)
    369       (#x00200010 . #x0ff00090))
    370      ())
    371    (define-arm-instruction eors (:rd :rn :shifter)
    372      #x00300000
    373      ((#x02300000 . #x0ff00000)
    374       (#x00300000 . #x0ff00010)
    375       (#x00300010 . #x0ff00090))
    376      ())
    377    (define-arm-instruction sub (:rd :rn :shifter)
    378      #x00400000
    379      ((#x02400000 . #x0ff00000)
    380       (#x00400000 . #x0ff00010)
    381       (#x00400010 . #x0ff00090))
    382      ())
    383    (define-arm-instruction subs (:rd :rn :shifter)
    384      #x00500000
    385      ((#x02500000 . #x0ff00000)
    386       (#x00500000 . #x0ff00010)
    387       (#x00500010 . #x0ff00090))
    388      ())
    389    (define-arm-instruction rsb (:rd :rn :shifter)
    390      #x00600000
    391      ((#x02600000 . #x0ff00000)
    392       (#x00600000 . #x0ff00010)
    393       (#x00600010 . #x0ff00090))
    394      ())
    395    (define-arm-instruction rsbs (:rd :rn :shifter)
    396      #x00700000
    397      ((#x02700000 . #x0ff00000)
    398       (#x00700000 . #x0ff00010)
    399       (#x00700010 . #x0ff00090))
    400      ())   
    401    (define-arm-instruction add (:rd :rn :shifter)
    402      #x00800000
    403      ((#x02800000 . #x0ff00000)
    404       (#x00800000 . #x0ff00010)
    405       (#x00800010 . #x0ff00090))
    406      ())
    407    (define-arm-instruction adds (:rd :rn :shifter)
    408      #x00900000
    409      ((#x02900000 . #x0ff00000)
    410       (#x00900000 . #x0ff00010)
    411       (#x00900010 . #x0ff00090))
    412      ())
    413 
    414    (define-arm-instruction adc (:rd :rn :shifter)
    415      #x00a00000
    416      ((#x02a00000 . #x0ff00000)
    417       (#x00a00000 . #x0ff00010)
    418       (#x00a00010 . #x0ff00090))
    419      ())
    420    (define-arm-instruction adcs (:rd :rn :shifter)
    421      #x00b00000
    422      ((#x02b00000 . #x0ff00000)
    423       (#x00b00000 . #x0ff00010)
    424       (#x00b00010 . #x0ff00090))
    425      ())
    426    (define-arm-instruction sbc (:rd :rn :shifter)
    427      #x00c00000
    428      ((#x02c00000 . #x0ff00000)
    429       (#x00c00000 . #x0ff00010)
    430       (#x00c00010 . #x0ff00090))
    431      ())
    432    (define-arm-instruction sbcs (:rd :rn :shifter)
    433      #x00d00000
    434      ((#x02d00000 . #x0ff00000)
    435       (#x00d00000 . #x0ff00010)
    436       (#x00d00010 . #x0ff00090))
    437      ())
    438    (define-arm-instruction rsc (:rd :rn :shifter)
    439      #x00e00000
    440      ((#x02e00000 . #x0ff00000)
    441       (#x00e00000 . #x0ff00010)
    442       (#x00e00010 . #x0ff00090))
    443      ())
    444    (define-arm-instruction rscs (:rd :rn :shifter)
    445      #x00f00000
    446      ((#x02f00000 . #x0ff00000)
    447       (#x00f00000 . #x0ff00010)
    448       (#x00f00010 . #x0ff00090))
    449      ())
    450    (define-arm-instruction tst (:rn :shifter)
    451      #x01100000
    452      ((#x03100000 . #x0ff00000)
    453       (#x01100000 . #x0ff00010)
    454       (#x01100010 . #x0ff00090))
    455      ())
    456    (define-arm-instruction tsts (:rn :shifter)
    457      #x01100000
    458      ((#x03100000 . #x0ff00000)
    459       (#x01100000 . #x0ff00010)
    460       (#x01100010 . #x0ff00090))
    461      ())
    462    (define-arm-instruction orr (:rd :rn :shifter)
    463      #x01800000
    464      ((#x03800000 . #x0ff00000)
    465       (#x01800000 . #x0ff00010)
    466       (#x01800010 . #x0ff00090))
    467      ())
    468    (define-arm-instruction orrs (:rd :rn :shifter)
    469      #x01900000
    470      ((#x03900000 . #x0ff00000)
    471       (#x01900000 . #x0ff00010)
    472       (#x01900010 . #x0ff00090))
    473      ())
    474    (define-arm-instruction bic (:rd :rn :shifter)
    475      #x01c00000
    476      ((#x03c00000 . #x0ff00000)
    477       (#x01c00000 . #x0ff00010)
    478       (#x01c00010 . #x0ff00090))
    479      ())
    480    (define-arm-instruction bics (:rd :rn :shifter)
    481      #x01d00000
    482      ((#x03d00000 . #x0ff00000)
    483       (#x01d00000 . #x0ff00010)
    484       (#x01d00010 . #x0ff00090))
    485      ())
    486    (define-arm-instruction cmp (:rn :shifter)
    487      #x01500000
    488      ((#x03500000 . #x0ff00000)
    489       (#x01500000 . #x0ff00010)
    490       (#x01500010 . #x0ff00090))
    491      ())
    492    (define-arm-instruction cmps (:rn :shifter)
    493      #x01500000
    494      ((#x03500000 . #x0ff00000)
    495       (#x01500000 . #x0ff00010)
    496       (#x01500010 . #x0ff00090))
    497      ())
    498    (define-arm-instruction cmn (:rd :shifter)
    499      #x01700000
    500      ((#x03700000 . #x0ff00000)
    501       (#x01700000 . #x0ff00010)
    502       (#x01700010 . #x0ff00090))
    503      ())
    504 
    505    (define-arm-instruction cmns (:rd :shifter)
    506      #x01700000
    507      ((#x03700000 . #x0ff00000)
    508       (#x01700000 . #x0ff00010)
    509       (#x01700010 . #x0ff00090))
    510      ())
    511    
    512    (define-arm-instruction nop ()
    513      #x01a00000
    514      #x0fffffff
    515      ())
    516    
    517    (define-arm-instruction mov (:rd :shifter)
    518      #x01a00000
    519      ((#x03a00000 . #x0ff00000)
    520       (#x01a00000 . #x0ff00010)
    521       (#x01a00010 . #x0ff00090))
    522      ())
    523    (define-arm-instruction movs (:rd :shifter)
    524      #x01b00000
    525      ((#x03b00000 . #x0ff00000)
    526       (#x01b00000 . #x0ff00010)
    527       (#x01b00010 . #x0ff00090))
    528      ())
    529    (define-arm-instruction mvn (:rd :shifter)
    530      #x01e00000
    531      ((#x03e00000 . #x0ff00000)
    532       (#x01e00000 . #x0ff00010)
    533       (#x01e00010 . #x0ff00090))
    534      ())
    535    (define-arm-instruction mvns (:rd :shifter)
    536      #x01f00000
    537      ((#x03f00000 . #x0ff00000)
    538       (#x01f00000 . #x0ff00010)
    539       (#x01f00010 . #x0ff00090))
    540      ())
    541    (define-arm-instruction vpop1 (:rd)
    542      #x049a0004
    543      #x0fff0fff
    544      ())
    545    (define-arm-instruction spjump (:spentry)
    546      #x0593f000
    547      #x0ffff000
    548      ())
    549    (define-arm-instruction sploadlr (:spentry)
    550      #x0593e000
    551      #x0ffff000
    552      ())
    553    (define-arm-instruction ldr (:rd :mem12)
    554      #x04100000
    555      #x0c500000
    556      ())
    557    (define-arm-instruction ldrb (:rd :mem12)
    558      #x04500000
    559      #x0c500000
    560      ())
    561    (define-arm-instruction vpush1 (:rd)
    562      #x052a0004
    563      #x0fff0fff
    564      ())
    565    (define-arm-instruction str (:rd :mem12)
    566      #x04000000
    567      #x0c500000
    568      ())
    569    (define-arm-instruction strb (:rd :mem12)
    570      #x04400000
    571      #x0c500000
    572      ())
    573    (define-arm-instruction ldrh (:rd :mem8)
    574      #x001000b0
    575      #x0e3000f0
    576      ())
    577    (define-arm-instruction strh (:rd :mem8)
    578      #x000000b0
    579      #x0e3000f0
    580      ())
    581    (define-arm-instruction ldrsh (:rd :mem8)
    582      #x001000f0
    583      #x0e3000f0
    584      ())
    585    (define-arm-instruction ldrsb (:rd :mem8)
    586      #x001000d0
    587      #x0e3000f0
    588      ())
    589    (define-arm-instruction ldrd  (:rde :mem8)
    590      #x000000d0
    591      #x0e1000f0
    592      ())
    593    (define-arm-instruction strd  (:rde :mem8)
    594      #x000000f0
    595      #x0e1000f0
    596      ())
    597 
    598    (define-arm-instruction mul (:rn :rm :rs)
    599      #x00000090
    600      #x0ff000f0
    601      ())
    602    (define-arm-instruction muls (:rn :rm :rs)
    603      #x00100090
    604      #x0ff000f0
    605      ())
    606 
    607    (define-arm-instruction mla (:rn :rm :rs :rd)
    608      #x00200090
    609      #x0ff000f0
    610      ())
    611    (define-arm-instruction mlas (:rn :rm :rs :rd)
    612      #x00300090
    613      #x0ff000f0
    614      ())
    615    
    616    (define-arm-instruction stm (:rnw :reglist)
    617      #x08800000
    618      #x0fd00000
    619      ())
    620    (define-arm-instruction stmia (:rnw :reglist)
    621      #x08800000
    622      #x0fd00000
    623      ())
    624    (define-arm-instruction stmea (:rnw :reglist)
    625      #x08800000
    626      #x0fd00000
    627      ())
    628    (define-arm-instruction ldmia (:rnw :reglist)
    629      #x08900000
    630      #x0fd00000
    631      ())
    632    (define-arm-instruction ldm (:rnw :reglist)
    633      #x08900000
    634      #x0fd00000
    635      ())
    636    (define-arm-instruction ldmfd (:rnw :reglist)
    637      #x08900000
    638      #x0fd00000
    639      ())
    640    (define-arm-instruction stmdb (:rnw :reglist)
    641      #x09000000
    642      #x0fd00000
    643      ())
    644    (define-arm-instruction stmfb (:rnw :reglist)
    645      #x09000000
    646      #x0fd00000
    647      ())
    648    (define-arm-instruction stmfd (:rnw :reglist)
    649      #x09000000
    650      #x0ff00000
    651      ())
    652    (define-arm-instruction ldmdb (:rnw :reglist)
    653      #x09100000
    654      #x0fd00000
    655      ())
    656    (define-arm-instruction ldmea (:rnw :reglist)
    657      #x09100000
    658      #x0fd00000
    659      ())
    660 
    661    (define-arm-instruction b (:b)
    662      #x0a000000
    663      #x0f000000
    664      ())
    665    (define-arm-instruction bl (:b)
    666      #x0b000000
    667      #x0f000000
    668      ())
    669  
    670    (define-arm-instruction bx (:rm)
    671      #x012fff10
    672      #x0ffffff0
    673      ())
    674    (define-arm-instruction blx (:rm)
    675      #x012fff30
    676      #x0ffffff0
    677      ())
    678 
    679 ;;; VFP instructions
    680    (define-arm-instruction fabsd (:dd :dm)
    681      #x0eb00bc0
    682      #x0fff0ff0
    683      ())
    684    (define-arm-instruction fabss (:sd :sm)
    685      #x0eb00ac0
    686      #x0fbf0fd0
    687      ())
    688    (define-arm-instruction fnegd (:dd :dm)
    689      #x0eb10b40
    690      #x0fff0ff0
    691      ())
    692    (define-arm-instruction fnegs (:sd :sm)
    693      #x0eb10a40
    694      #x0fbf0fd0
    695      ())
    696    (define-arm-instruction fsqrtd (:dd :dm)
    697      #x0eb10bc0
    698      #x0fff0ff0
    699      ())
    700    (define-arm-instruction fsqrts (:sd :sm)
    701      #x0eb10ac0
    702      #x0bff0fb0
    703      ())   
    704    (define-arm-instruction faddd (:dd :dn :dm)
    705      #x0e300b00
    706      #x0ff00ff0
    707      ())
    708    (define-arm-instruction fadds (:sd :sn :sm)
    709      #x0e300a00
    710      #x0f300f50
    711      ())
    712    (define-arm-instruction fmsr (:sn :rd)
    713      #x0e000a10
    714      #x0ff00f7f
    715      ())
    716    (define-arm-instruction fmrs (:rd :sn)
    717      #x0e100a10
    718      #x0ff00f7f
    719      ())
    720    (define-arm-instruction fmrrd (:rd :rn :dm)
    721      #x0c500b10
    722      #x0ff00ff0
    723      ())
    724    (define-arm-instruction fmdrr (:dm :rd :rn)
    725      #x0c400b10
    726      #x0ff00ff0
    727      ())
    728    (define-arm-instruction fsitod (:dd :sm)
    729      #x0eb80bc0
    730      #x0fbf0fc0
    731      ())
    732    (define-arm-instruction fsitos (:sd :sm)
    733      #x0eb80ac0
    734      #x0fbf0fc0
    735      ())
    736    (define-arm-instruction fcmped (:dd :dm)
    737      #x0eb40bc0
    738      #x0fff0fc0
    739      ())
    740    (define-arm-instruction fcmpes (:sd :sm)
    741      #x0eb40ac0
    742      #x0fff0fc0
    743      ())
    744    (define-arm-instruction fmstat ()
    745      #x0ef1fa10
    746      #x0fffffff
    747      ())
    748    (define-arm-instruction fsubd (:dd :dn :dm)
    749      #x0e300b40
    750      #x0fb00f50
    751      ())
    752    (define-arm-instruction fsubs (:sd :sn :sm)
    753      #x0e300a40
    754      #x0fb00f50
    755      ())
    756    (define-arm-instruction fmuld (:dd :dn :dm)
    757      #x0e200b00
    758      #x0ff00ff0
    759      ())
    760    (define-arm-instruction fmuls (:sd :sn :sm)
    761      #x0e200a00
    762      #x0fb00f50
    763      ())
    764    (define-arm-instruction fdivd (:dd :dn :dm)
    765      #x0e800b00
    766      #x0fb00ff0
    767      ())
    768    (define-arm-instruction fdivs (:sd :sn :sm)
    769      #x0e800a00
    770      #x0fb00f50
    771      ())
    772 
    773    (define-arm-instruction fmacd (:dd :dn :dm)
    774      #x0e000b00
    775      #x0fb00f50
    776      ())
    777    (define-arm-instruction fmacs (:sd :sn :sm)
    778      #x0e000a00
    779      #x0fb00f50
    780      ())
    781 
    782    (define-arm-instruction fcpyd (:dd :dm)
    783      #x0eb00b40
    784      #x0fbf0ff0
    785      ())
    786    (define-arm-instruction fcpys (:sd :sm)
    787      #x0eb00a40
    788      #x0fbf0fc0
    789      ())
    790    (define-arm-instruction fcvtsd (:sd :dm)
    791      #x0eb70bc0
    792      #x0fbf0ff0
    793      ())
    794    (define-arm-instruction fcvtds (:dd :sm)
    795      #x0eb70ac0
    796      #x0ff70ac0
    797      ())
    798    (define-arm-instruction fmxr (:fpux :rd)
    799      #x0ee00a10
    800      #x0ff00fff
    801      ())
    802    (define-arm-instruction fmrx (:rd :fpux)
    803      #x0ef00a10
    804      #x0ff00fff
    805      ())
    806    (define-arm-instruction smull (:rd :rn :rm :rs)
    807      #x00c00090
    808      #x0ff000f0
    809      ())
    810    (define-arm-instruction smulls (:rd :rn :rm :rs)
    811      #x00d00090
    812      #x0ff000f0
    813      ())
    814    (define-arm-instruction umull (:rd :rn :rm :rs)
    815      #x00800090
    816      #x0ff000f0
    817      ())
    818    (define-arm-instruction umulls (:rd :rn :rm :rs)
    819      #x00900090
    820      #x0ff000f0
    821      ())
    822 
    823    (define-arm-instruction fstd (:dd :fpaddr)
    824      #x0d000b00
    825      #x0f700f00
    826      ())
    827    (define-arm-instruction fsts (:sd :fpaddr)
    828      #x0d000a00
    829      #x0f300f00
    830      ())
    831    (define-arm-instruction fstmdbs (:sd :rnw :srcount)
    832      #x0d200a00
    833      #x0fb00f00
    834      ())
    835    (define-arm-instruction fstmias (:sd :rnw :srcount)
    836      #x0c800a00
    837      #x0fd00f00
    838      ())
    839    (define-arm-instruction fstmdbd (:dd :rnw :drcount)
    840      #x0d200b00
    841      #x0ff00f00
    842      ())
    843    (define-arm-instruction fstmiad (:dd :rnw :drcount)
    844      #x0c800b00
    845      #x0fd00f00
    846      ())
    847    (define-arm-instruction fldd (:dd :fpaddr)
    848      #x0d100b00
    849      #x0f700f00
    850      ())     
    851    (define-arm-instruction flds (:sd :fpaddr)
    852      #x0d100a00
    853      #x0f300f00
    854      ())
    855    (define-arm-instruction fldmias (:sd :rnw :srcount)
    856      #x0c900a00
    857      #x0f900f00
    858      ())
    859    (define-arm-instruction fldmiad (:dd :rnw :drcount)
    860      #x0c900b00
    861      #x0f900f00
    862      ())     
    863    (define-arm-instruction ftosid (:sd :dm)
    864      #x0ebd0b40
    865      #x0fbf0fc0
    866      ())
    867    (define-arm-instruction ftosizd (:sd :dm)
    868      #x0ebd0bc0
    869      #x0fbf0fc0
    870      ())
    871    (define-arm-instruction ftosis (:sd :sm)
    872      #x0ebd0a40
    873      #x0fbf0fc0
    874      ())
    875    (define-arm-instruction ftosizs (:sd :sm)
    876      #x0ebd0ac0
    877      #x0fbf0fc0
    878      ())   
    879    (define-arm-instruction ldrex (:rd :@rn)
    880      #x01900f9f
    881      #x0ff00fff
    882      ())
    883    (define-arm-instruction strex (:rd :rm :@rn)
    884      #x01800f90
    885      #x0ff00ff0
    886      ())
    887    (define-arm-instruction clz (:rd :rm)
    888      #x016f0f10
    889      #x0fff0ff0
    890      ())
    891  ))
     897     ())))
    892898
    893899(dotimes (i (length *arm-instruction-table*))
  • trunk/source/compiler/ARM/arm-lapmacros.lisp

    r16685 r16748  
    354354     ,none)))
    355355
    356 ;;; ARMv7-only instructions
    357 (defarmlapmacro clrex (&optional (temp 'arm::imm0))
    358   (let* ((skip (gensym)))
    359     `(progn
    360       (ldr ,temp (:@ rcontext (:$ arm::tcr.architecture-version)))
    361       (cmp ,temp (:$ 0))
    362       (blt ,skip)
    363       (:opcode #xf57ff01f)
    364       ,skip)))
    365 
    366 (defarmlapmacro dmb (&optional (temp 'arm::imm0))
    367   (let* ((skip (gensym)))
    368     `(progn
    369       (ldr ,temp (:@ rcontext (:$ arm::tcr.architecture-version)))
    370       (cmp ,temp (:$ 0))
    371       (blt ,skip)
    372       (:opcode #xf57ff05f)
    373       ,skip)))
     356
    374357
    375358
Note: See TracChangeset for help on using the changeset viewer.