-
-(macrolet ((fix-storage (inc-offset-by)
- `(progn
- (loadw offset object 0 instance-pointer-lowtag)
- (inst srl offset n-widetag-bits offset)
- (inst sll offset 2 offset)
- (inst sub offset index offset)
- (inst addi ,inc-offset-by offset offset)
- (inst add offset object lip)))
+(macrolet ((lfloat (imm base dst &key side)
+ `(cond
+ ((< ,imm (ash 1 4))
+ (inst flds ,imm ,base ,dst :side ,side))
+ ((and (< ,imm (ash 1 13))
+ (> ,imm 0))
+ (progn
+ (inst li ,imm offset)
+ (inst fldx offset ,base ,dst :side ,side)))
+ (t
+ (error "inst fldx cant handle offset-register loaded with immediate ~s" ,imm))))
+ (sfloat (src imm base &key side)
+ `(cond
+ ((< ,imm (ash 1 4))
+ (inst fsts ,src ,imm ,base :side ,side))
+ ((and (< ,imm (ash 1 13))
+ (> ,imm 0))
+ (progn
+ (inst ldo ,imm zero-tn offset)
+ (inst fstx ,src offset ,base :side ,side)))
+ (t
+ (error "inst fstx cant handle offset-register loaded with immediate ~s" ,imm))))