< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
@@ -92,13 +92,13 @@
  reg_def R5_H    ( SOC, SOC, Op_RegI,  5, r5->as_VMReg()->next() );
  reg_def R6      ( SOC, SOC, Op_RegI,  6, r6->as_VMReg()         );
  reg_def R6_H    ( SOC, SOC, Op_RegI,  6, r6->as_VMReg()->next() );
  reg_def R7      ( SOC, SOC, Op_RegI,  7, r7->as_VMReg()         );
  reg_def R7_H    ( SOC, SOC, Op_RegI,  7, r7->as_VMReg()->next() );
- reg_def R8      ( NS,  SOC, Op_RegI,  8, r8->as_VMReg()         );
+ reg_def R8      ( NS,  SOC, Op_RegI,  8, r8->as_VMReg()         ); // rscratch1, non-allocatable
  reg_def R8_H    ( NS,  SOC, Op_RegI,  8, r8->as_VMReg()->next() );
- reg_def R9      ( NS,  SOC, Op_RegI,  9, r9->as_VMReg()         );
+ reg_def R9      ( NS,  SOC, Op_RegI,  9, r9->as_VMReg()         ); // rscratch2, non-allocatable
  reg_def R9_H    ( NS,  SOC, Op_RegI,  9, r9->as_VMReg()->next() );
  reg_def R10     ( SOC, SOC, Op_RegI, 10, r10->as_VMReg()        );
  reg_def R10_H   ( SOC, SOC, Op_RegI, 10, r10->as_VMReg()->next());
  reg_def R11     ( SOC, SOC, Op_RegI, 11, r11->as_VMReg()        );
  reg_def R11_H   ( SOC, SOC, Op_RegI, 11, r11->as_VMReg()->next());

@@ -166,14 +166,17 @@
  // v16-v31 are SOC as per the platform spec
  
  // For SVE vector registers, we simply extend vector register size to 8
  // slots. A vector register with lower 4 slots, denotes a 128-bit vector
  // NEON vector register. While a vector register with whole 8 slots,
- // indicating an SVE vector register with vector size >= 128 bits
- // (128 ~ 2048 bits, multiple of 128 bits). A 128-bit SVE vector
+ // indicating an SVE scalable vector register with vector size >= 128
+ // bits (128 ~ 2048 bits, multiple of 128 bits). A 128-bit SVE vector
  // register also has 8 slots, but the the actual size is 128 bits, the
- // same as a NEON vector register.
+ // same as a NEON vector register. Since during JIT compilation, the
+ // real SVE vector register size can be detected, so register allocator
+ // is able to do the right thing with the real register size, e.g. for
+ // spilling/unspilling.
  
    reg_def V0   ( SOC, SOC, Op_RegF, 0, v0->as_VMReg()          );
    reg_def V0_H ( SOC, SOC, Op_RegF, 0, v0->as_VMReg()->next()  );
    reg_def V0_J ( SOC, SOC, Op_RegF, 0, v0->as_VMReg()->next(2) );
    reg_def V0_K ( SOC, SOC, Op_RegF, 0, v0->as_VMReg()->next(3) );
< prev index next >