instruction scheduling optimization.

Wed, 03 Aug 2016 01:02:20 +0800

author
fujie
date
Wed, 03 Aug 2016 01:02:20 +0800
changeset 50
372313324431
parent 49
76cea9141c9d
child 51
9434ecde44bf

instruction scheduling optimization.

src/cpu/mips/vm/mips_64.ad file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/mips/vm/mips_64.ad	Tue Aug 02 17:02:38 2016 +0800
     1.2 +++ b/src/cpu/mips/vm/mips_64.ad	Wed Aug 03 01:02:20 2016 +0800
     1.3 @@ -4399,10 +4399,12 @@
     1.4  attributes %{
     1.5   	fixed_size_instructions;        	// Fixed size instructions
     1.6   	branch_has_delay_slot;			// branch have delay slot in gs2
     1.7 - 	max_instructions_per_bundle = 4;   	// Up to 5 instructions per bundle
     1.8 + 	max_instructions_per_bundle = 1;   	// 1 instruction per bundle
     1.9 + 	max_bundles_per_cycle = 4;       	// Up to 4 bundles per cycle
    1.10 +        bundle_unit_size=4;
    1.11   	instruction_unit_size = 4;         	// An instruction is 4 bytes long
    1.12 - 	instruction_fetch_unit_size = 32;  	// The processor fetches one line
    1.13 - 	instruction_fetch_units = 1;       	// of 32 bytes
    1.14 + 	instruction_fetch_unit_size = 16;  	// The processor fetches one line
    1.15 + 	instruction_fetch_units = 1;       	// of 16 bytes
    1.16   
    1.17   	// List of nop instructions
    1.18   	nops( MachNop );
    1.19 @@ -4411,288 +4413,281 @@
    1.20   //----------RESOURCES----------------------------------------------------------
    1.21   // Resources are the functional units available to the machine
    1.22   
    1.23 - // godson2c pipeline
    1.24 - // 4 decoders, a "bundle" is the limit 4 instructions decoded per cycle
    1.25 - // 1 load/store ops per cycle, 1 branch, 2 FPU, 
    1.26 - // 2 ALU op, only ALU0 handles mul/div instructions.
    1.27 - resources( D0, D1, D2, D3, DECODE = D0 | D1 | D2 | D3, 
    1.28 - 		MEM, BR, FPU0, FPU1, FPU = FPU0 | FPU1, 
    1.29 - 		ALU0, ALU1, ALU = ALU0 | ALU1 );
    1.30 - 
    1.31 + resources(D1, D2, D3, D4, DECODE = D1 | D2 | D3| D4,  ALU1, ALU2,  ALU = ALU1 | ALU2,  FPU1, FPU2, FPU = FPU1 | FPU2,  MEM,  BR); 
    1.32 +
    1.33   //----------PIPELINE DESCRIPTION-----------------------------------------------
    1.34   // Pipeline Description specifies the stages in the machine's pipeline
    1.35 - 
    1.36 - // godson 2c pipeline
    1.37 - // i dont know the detail of the godson 2c pipeline, leave it blank now. 
    1.38 - // by yjl 2/21/2006
    1.39 - pipe_desc(S0, S1, S2, S3, S4, S5, S6);
    1.40 - 
    1.41 +
    1.42 + // IF: fetch
    1.43 + // ID: decode
    1.44 + // RD: read 
    1.45 + // CA: caculate 
    1.46 + // WB: write back 
    1.47 + // CM: commit 
    1.48 +
    1.49 + pipe_desc(IF, ID, RD, CA, WB, CM);
    1.50 +
    1.51 +
    1.52   //----------PIPELINE CLASSES---------------------------------------------------
    1.53   // Pipeline Classes describe the stages in which input and output are
    1.54   // referenced by the hardware pipeline.
    1.55 +
    1.56 + //No.1 Integer ALU reg-reg operation : dst <-- reg1 op reg2  
    1.57 + pipe_class ialu_regI_regI(mRegI dst, mRegI src1, mRegI src2) %{
    1.58 +        single_instruction;
    1.59 + 	src1   : RD(read);
    1.60 + 	src2   : RD(read);
    1.61 +        dst    : WB(write)+1;
    1.62 +        DECODE : ID;
    1.63 + 	ALU    : CA;
    1.64 + %}
    1.65 +
    1.66 + //No.19 Integer mult operation : dst <-- reg1 mult reg2  
    1.67 + pipe_class ialu_mult(mRegI dst, mRegI src1, mRegI src2) %{
    1.68 + 	src1   : RD(read);
    1.69 + 	src2   : RD(read);
    1.70 +        dst    : WB(write)+5;
    1.71 +        DECODE : ID;
    1.72 + 	ALU2   : CA;
    1.73 + %}
    1.74 +
    1.75 + pipe_class mulL_reg_reg(mRegL dst, mRegL src1, mRegL src2) %{
    1.76 + 	src1   : RD(read);
    1.77 + 	src2   : RD(read);
    1.78 +        dst    : WB(write)+10;
    1.79 +        DECODE : ID;
    1.80 + 	ALU2   : CA;
    1.81 + %}
    1.82 +
    1.83 + //No.19 Integer div operation : dst <-- reg1 div reg2  
    1.84 + pipe_class ialu_div(mRegI dst, mRegI src1, mRegI src2) %{
    1.85 + 	src1   : RD(read);
    1.86 + 	src2   : RD(read);
    1.87 +        dst    : WB(write)+10;
    1.88 +        DECODE : ID;
    1.89 + 	ALU2   : CA;
    1.90 + %}
    1.91 +
    1.92 + //No.19 Integer mod operation : dst <-- reg1 mod reg2  
    1.93 + pipe_class ialu_mod(mRegI dst, mRegI src1, mRegI src2) %{
    1.94 +        instruction_count(2);
    1.95 + 	src1   : RD(read);
    1.96 + 	src2   : RD(read);
    1.97 +        dst    : WB(write)+10;
    1.98 +        DECODE : ID;
    1.99 + 	ALU2   : CA;
   1.100 + %}
   1.101 +
   1.102 + //No.15 Long ALU reg-reg operation : dst <-- reg1 op reg2  
   1.103 + pipe_class ialu_regL_regL(mRegL dst, mRegL src1, mRegL src2) %{
   1.104 +        instruction_count(2);
   1.105 + 	src1   : RD(read);
   1.106 + 	src2   : RD(read);
   1.107 +        dst    : WB(write);
   1.108 +        DECODE : ID;
   1.109 + 	ALU    : CA;
   1.110 + %}
   1.111 +
   1.112 + //No.18 Long ALU reg-imm16 operation : dst <-- reg1 op imm16 
   1.113 + pipe_class ialu_regL_imm16(mRegL dst, mRegL src) %{
   1.114 +        instruction_count(2);
   1.115 + 	src    : RD(read);
   1.116 +        dst    : WB(write);
   1.117 +        DECODE : ID;
   1.118 + 	ALU    : CA;
   1.119 + %}
   1.120 +
   1.121 + //no.16 load Long from memory :                     
   1.122 + pipe_class ialu_loadL(mRegL dst, memory mem) %{
   1.123 + 	instruction_count(2);
   1.124 + 	mem    : RD(read);
   1.125 + 	dst    : WB(write)+5;
   1.126 +        DECODE : ID;
   1.127 + 	MEM    : RD;
   1.128 + %}
   1.129 +
   1.130 + //No.17 Store Long to Memory :                     
   1.131 + pipe_class ialu_storeL(mRegL src, memory mem) %{
   1.132 + 	instruction_count(2);
   1.133 + 	mem    : RD(read);
   1.134 + 	src    : RD(read);
   1.135 +        DECODE : ID;
   1.136 + 	MEM    : RD;
   1.137 + %}
   1.138 +
   1.139 + //No.2 Integer ALU reg-imm16 operation : dst <-- reg1 op imm16  
   1.140 + pipe_class ialu_regI_imm16(mRegI dst, mRegI src) %{
   1.141 +        single_instruction;
   1.142 + 	src    : RD(read);
   1.143 +        dst    : WB(write);
   1.144 +        DECODE : ID;
   1.145 + 	ALU    : CA;
   1.146 + %}
   1.147 +
   1.148 + //No.3 Integer move operation : dst <-- reg  
   1.149 + pipe_class ialu_regI_mov(mRegI dst, mRegI src) %{
   1.150 + 	src    : RD(read);
   1.151 +        dst    : WB(write);
   1.152 +        DECODE : ID;
   1.153 + 	ALU    : CA;
   1.154 + %}
   1.155   
   1.156 - // COMPILE SKIPPED
   1.157 - // Then: _reg
   1.158 - // Then: _reg if there is a 2nd register
   1.159 - // Then: _long if it's a pair of instructions implementing a long
   1.160 - // Then: _fat if it requires the big decoder
   1.161 - //   Or: _mem if it requires the big decoder and a memory unit.
   1.162 - 
   1.163 - // Integer Load from Memory                     
   1.164 - pipe_class ialu_reg_mem(memory mem, mRegI src) %{
   1.165 - 	single_instruction;
   1.166 - 	mem    : S3(read);
   1.167 - 	src    : S5(read);
   1.168 - 	D0     : S0;        // big decoder only
   1.169 - 	ALU    : S4;        // any alu
   1.170 - 	MEM    : S3;
   1.171 -%}
   1.172 -
   1.173 -// Integer ALU reg operation
   1.174 -pipe_class ialu_reg(mRegI dst) %{
   1.175 -	single_instruction;
   1.176 -	dst    : S4(write);
   1.177 -	dst    : S3(read);
   1.178 -	DECODE : S0;        // any decoder
   1.179 -	ALU    : S3;        // any alu
   1.180 -%}
   1.181 -
   1.182 -// Long ALU reg-mem operation
   1.183 -pipe_class ialu_reg_long_mem(mRegL dst, memory mem) %{
   1.184 -    instruction_count(2);
   1.185 -    dst    : S5(write);
   1.186 -    mem    : S3(read);
   1.187 -    D0     : S0(2);     // big decoder only; twice
   1.188 -    ALU    : S4(2);     // any 2 alus
   1.189 -    MEM    : S3(2);     // both mems
   1.190 -%}
   1.191 -
   1.192 -// Integer ALU reg-reg operation
   1.193 -pipe_class ialu_reg_reg(mRegI dst, mRegI src1, mRegI src2) %{
   1.194 -	single_instruction;
   1.195 -	dst    : S4(write);
   1.196 -	src1   : S3(read);
   1.197 -	src2   : S3(read);
   1.198 -	DECODE : S0;        // any decoder
   1.199 -	ALU    : S3;        // any alu
   1.200 -%}
   1.201 -
   1.202 -// Integer ALU reg-reg operation
   1.203 -pipe_class ialu_reg_imm(mRegI dst, mRegI src1, immI src2) %{
   1.204 -	single_instruction;
   1.205 -	dst    : S4(write);
   1.206 -	src1   : S3(read);
   1.207 -	DECODE : S0;        // any decoder
   1.208 -	ALU    : S3;        // any alu
   1.209 -%}
   1.210 -
   1.211 -// Integer ALU0 reg-reg operation
   1.212 -pipe_class ialu_reg_reg_alu0(mRegI dst, mRegI src1, mRegI src2) %{
   1.213 -    single_instruction;
   1.214 -    dst    : S4(write);
   1.215 -    src1   : S3(read);
   1.216 -    src2   : S3(read);
   1.217 -    D0     : S0;        // Big decoder only
   1.218 -    ALU0   : S3;        // only alu0
   1.219 -%}
   1.220 -
   1.221 -// Integer ALU reg-mem operation
   1.222 -pipe_class ialu_reg_reg_mem(mRegI dst,mRegI src1, memory src2) %{
   1.223 -    single_instruction;
   1.224 -    dst     : S4(write);
   1.225 -    src1   : S3(read);
   1.226 -    src2   : S3(read);
   1.227 -    D0     : S0;        // big decoder only
   1.228 -    ALU    : S4;        // any alu
   1.229 -    MEM    : S3;
   1.230 -%}
   1.231 -
   1.232 -
   1.233 - // Float reg-mem operation
   1.234 -pipe_class fpu_reg_mem(regD dst, memory mem) %{
   1.235 -    instruction_count(2);
   1.236 -    dst    : S5(write);
   1.237 -    mem    : S3(read);
   1.238 -    D0     : S0;        // big decoder only
   1.239 -    DECODE : S1;        // any decoder for FPU POP
   1.240 -    FPU    : S4;
   1.241 -    MEM    : S3;        // any mem
   1.242 -%}
   1.243 -      
   1.244 -
   1.245 -// Float reg-reg operation
   1.246 -pipe_class fpu_reg_reg(regD dst, regD src1, regD src2) %{
   1.247 -    instruction_count(2);
   1.248 -    dst     : S4(write);
   1.249 -    src1    : S3(read);
   1.250 -    src2    : S3(read);
   1.251 -    DECODE  : S0(2);     // any 2 decoders
   1.252 -    FPU     : S3;
   1.253 -%}
   1.254 -
   1.255 -
   1.256 -// Long ALU reg operation using big decoder
   1.257 -pipe_class ialu_reg_long_fat(mRegL dst) %{
   1.258 -    instruction_count(2);
   1.259 -    dst    : S4(write);
   1.260 -    dst    : S3(read);
   1.261 -    D0     : S0(2);     // big decoder only; twice
   1.262 -    ALU    : S3(2);     // any 2 alus
   1.263 -%}
   1.264 -
   1.265 -// UnConditional branch
   1.266 -pipe_class pipe_jmp( label labl ) %{
   1.267 -    single_instruction;
   1.268 -    BR   : S3;
   1.269 -%}
   1.270 -
   1.271 -
   1.272 -// Integer ALU reg operation using big decoder
   1.273 -pipe_class ialu_reg_fat(mRegI dst) %{
   1.274 -    single_instruction;
   1.275 -    dst    : S4(write);
   1.276 -    dst    : S3(read);
   1.277 -    D0     : S0;        // big decoder only
   1.278 -    ALU    : S3;        // any alu
   1.279 -%}
   1.280 -
   1.281 -// Conditional branch
   1.282 -pipe_class pipe_branchP( cmpOp cmp, mRegP op1, mRegP op2, label labl ) %{
   1.283 -    single_instruction;
   1.284 -    op1   : S1(read);
   1.285 -    op2   : S1(read);
   1.286 -    BR    : S3;
   1.287 -%}
   1.288 -
   1.289 -// Generic big/slow expanded idiom
   1.290 -pipe_class pipe_slow(  ) %{
   1.291 -    instruction_count(10); multiple_bundles; force_serialization;
   1.292 -    fixed_latency(100);
   1.293 -    D0  : S0(2);
   1.294 -    MEM : S3(2);
   1.295 -%}
   1.296 -
   1.297 -pipe_class ialu_mem_reg(memory mem, mRegI src) %{
   1.298 -    single_instruction;
   1.299 -    mem    : S3(read);
   1.300 -    src    : S5(read);
   1.301 -    D0     : S0;        // big decoder only
   1.302 -    ALU    : S4;        // any alu
   1.303 -    MEM    : S3;
   1.304 -%}
   1.305 -
   1.306 -
   1.307 -// Integer ALU operation
   1.308 -pipe_class ialu_none(mRegI dst) %{
   1.309 -    single_instruction;
   1.310 -    dst  : S5(write);
   1.311 -    ALU  : S4;
   1.312 -%}
   1.313 -
   1.314 -// Integer Store to Memory
   1.315 -pipe_class ialu_mem_imm(memory mem) %{
   1.316 -    single_instruction;
   1.317 -    mem    : S3(read);
   1.318 -    D0     : S0;        // big decoder only
   1.319 -    ALU    : S4;        // any alu
   1.320 -    MEM    : S3;
   1.321 -%}
   1.322 -
   1.323 -// Float load constant
   1.324 -pipe_class fpu_reg_con(regD dst) %{
   1.325 -    instruction_count(2);
   1.326 -    dst    : S5(write);
   1.327 -    D0     : S0;        // big decoder only for the load
   1.328 -    DECODE : S1;        // any decoder for FPU POP
   1.329 -    FPU    : S4;
   1.330 -    MEM    : S3;        // any mem
   1.331 -%}
   1.332 -
   1.333 -// Float mem-reg operation
   1.334 -pipe_class fpu_mem_reg(memory mem, regD src) %{
   1.335 -    instruction_count(2);
   1.336 -    src    : S5(read);
   1.337 -    mem    : S3(read);
   1.338 -    DECODE : S0;        // any decoder for FPU PUSH
   1.339 -    D0     : S1;        // big decoder only
   1.340 -    FPU    : S4;
   1.341 -    MEM    : S3;        // any mem
   1.342 -%}
   1.343 -
   1.344 -// Conditional branch
   1.345 -pipe_class pipe_jcc( cmpOp cmp, FlagsReg cr, label labl ) %{
   1.346 -    single_instruction;
   1.347 -    cr    : S1(read);
   1.348 -    BR    : S3;
   1.349 -%}
   1.350 -
   1.351 -// Allocation idiom
   1.352 -pipe_class pipe_cmpxchg( mRegP dst, mRegP heap_ptr ) %{
   1.353 -    instruction_count(1); force_serialization;
   1.354 -    fixed_latency(6);
   1.355 -    heap_ptr : S3(read);
   1.356 -    DECODE   : S0(3);
   1.357 -    D0       : S2;
   1.358 -    MEM      : S3;
   1.359 -    ALU      : S3(2);
   1.360 -    dst      : S5(write);
   1.361 -    BR       : S5;
   1.362 -%}
   1.363 -
   1.364 -
   1.365 -// The real do-nothing guy
   1.366 -pipe_class empty( ) %{
   1.367 -    instruction_count(0);
   1.368 -%}
   1.369 -
   1.370 -
   1.371 -	// Long Store to Memory
   1.372 -	pipe_class ialu_mem_long_reg(memory mem, mRegL src) %{
   1.373 -		instruction_count(2);
   1.374 -		mem    : S3(read);
   1.375 -		src    : S5(read);
   1.376 -		D0     : S0(2);     // big decoder only; twice
   1.377 -		ALU    : S4(2);     // any 2 alus
   1.378 -		MEM    : S3(2);     // Both mems
   1.379 -	%}
   1.380 -
   1.381 -	// Long ALU reg-reg operation
   1.382 -	pipe_class ialu_reg_reg_long(mRegL dst, mRegL src) %{
   1.383 -		instruction_count(2);
   1.384 -		dst    : S4(write);
   1.385 -		src    : S3(read);
   1.386 -		DECODE : S0(2);     // any 2 decoders
   1.387 -		ALU    : S3(2);     // both alus
   1.388 -	%}
   1.389 -
   1.390 -// Long ALU reg operation
   1.391 -pipe_class ialu_reg_long(mRegL dst, mRegL src) %{
   1.392 -    instruction_count(2);
   1.393 -    dst    : S4(write);
   1.394 -    src    : S3(read);
   1.395 -    DECODE : S0(2);     // any 2 decoders
   1.396 -    ALU    : S3(2);     // both alus
   1.397 -%}
   1.398 -
   1.399 -
   1.400 -// Conditional move reg-reg
   1.401 -pipe_class pipe_cmov_reg( mRegI dst, mRegI src ) %{
   1.402 -    single_instruction;
   1.403 -    dst    : S4(write);
   1.404 -    src    : S3(read);
   1.405 -    DECODE : S0;        // any decoder
   1.406 -%}
   1.407 -
   1.408 -// Conditional move reg-reg long
   1.409 -pipe_class pipe_cmov_reg_long(mRegL dst, mRegL src) %{
   1.410 -    single_instruction;
   1.411 -    dst    : S4(write);
   1.412 -    src    : S3(read);
   1.413 -    DECODE : S0(2);     // any 2 decoders
   1.414 -%}
   1.415 -
   1.416 -%}
   1.417 - 
   1.418 + //No.4 No instructions : do nothing 
   1.419 + pipe_class empty( ) %{
   1.420 +        instruction_count(0);
   1.421 + %}
   1.422 +
   1.423 + //No.5 UnConditional branch :
   1.424 + pipe_class pipe_jump( label labl ) %{
   1.425 +        multiple_bundles;
   1.426 +        DECODE : ID;
   1.427 +	BR     : RD;
   1.428 + %}
   1.429 +
   1.430 + //No.6 ALU Conditional branch :
   1.431 + pipe_class pipe_alu_branch(mRegI src1, mRegI src2, label labl ) %{
   1.432 +        multiple_bundles;
   1.433 +        src1   : RD(read);
   1.434 +        src2   : RD(read);
   1.435 +        DECODE : ID;
   1.436 +	BR     : RD;
   1.437 + %}
   1.438 +
   1.439 + //no.7 load integer from memory :                     
   1.440 + pipe_class ialu_loadI(mRegI dst, memory mem) %{
   1.441 + 	mem    : RD(read);
   1.442 + 	dst    : WB(write)+3;
   1.443 +        DECODE : ID;
   1.444 + 	MEM    : RD;
   1.445 + %}
   1.446 +
   1.447 + //No.8 Store Integer to Memory :                     
   1.448 + pipe_class ialu_storeI(mRegI src, memory mem) %{
   1.449 + 	mem    : RD(read);
   1.450 + 	src    : RD(read);
   1.451 +        DECODE : ID;
   1.452 + 	MEM    : RD;
   1.453 + %}
   1.454 +
   1.455 +
   1.456 + //No.10 Floating FPU reg-reg operation : dst <-- reg1 op reg2  
   1.457 + pipe_class fpu_regF_regF(regF dst, regF src1, regF src2) %{
   1.458 + 	src1   : RD(read);
   1.459 + 	src2   : RD(read);
   1.460 +        dst    : WB(write);
   1.461 +        DECODE : ID;
   1.462 + 	FPU    : CA;
   1.463 + %}
   1.464 +
   1.465 + //No.22 Floating div operation : dst <-- reg1 div reg2  
   1.466 + pipe_class fpu_div(regF dst, regF src1, regF src2) %{
   1.467 + 	src1   : RD(read);
   1.468 + 	src2   : RD(read);
   1.469 +        dst    : WB(write);
   1.470 +        DECODE : ID;
   1.471 + 	FPU2   : CA;
   1.472 + %}
   1.473 +
   1.474 + pipe_class fcvt_I2D(regD dst, mRegI src) %{
   1.475 + 	src    : RD(read);
   1.476 +        dst    : WB(write);
   1.477 +        DECODE : ID;
   1.478 + 	FPU1   : CA;
   1.479 + %}
   1.480 +
   1.481 + pipe_class fcvt_D2I(mRegI dst, regD src) %{
   1.482 + 	src    : RD(read);
   1.483 +        dst    : WB(write);
   1.484 +        DECODE : ID;
   1.485 + 	FPU1   : CA;
   1.486 + %}
   1.487 +
   1.488 + pipe_class pipe_mfc1(mRegI dst, regD src) %{
   1.489 + 	src    : RD(read);
   1.490 +        dst    : WB(write);
   1.491 +        DECODE : ID;
   1.492 + 	MEM    : RD;
   1.493 + %}
   1.494 +
   1.495 + pipe_class pipe_mtc1(regD dst, mRegI src) %{
   1.496 + 	src    : RD(read);
   1.497 +        dst    : WB(write);
   1.498 +        DECODE : ID;
   1.499 + 	MEM    : RD(5);
   1.500 + %}
   1.501 +
   1.502 + //No.23 Floating sqrt operation : dst <-- reg1 sqrt reg2  
   1.503 + pipe_class fpu_sqrt(regF dst, regF src1, regF src2) %{
   1.504 +        multiple_bundles;
   1.505 + 	src1   : RD(read);
   1.506 + 	src2   : RD(read);
   1.507 +        dst    : WB(write);
   1.508 +        DECODE : ID;
   1.509 + 	FPU2   : CA;
   1.510 + %}
   1.511 +
   1.512 + //No.11 Load Floating from Memory :                     
   1.513 + pipe_class fpu_loadF(regF dst, memory mem) %{
   1.514 +        instruction_count(1);
   1.515 + 	mem    : RD(read);
   1.516 + 	dst    : WB(write)+3;
   1.517 +        DECODE : ID;
   1.518 + 	MEM    : RD;
   1.519 + %}
   1.520 +
   1.521 + //No.12 Store Floating to Memory :                     
   1.522 + pipe_class fpu_storeF(regF src, memory mem) %{
   1.523 +        instruction_count(1);
   1.524 + 	mem    : RD(read);
   1.525 + 	src    : RD(read);
   1.526 +        DECODE : ID;
   1.527 + 	MEM    : RD;
   1.528 + %}
   1.529 +
   1.530 + //No.13 FPU Conditional branch :
   1.531 + pipe_class pipe_fpu_branch(regF src1, regF src2, label labl ) %{
   1.532 +        multiple_bundles;
   1.533 +        src1   : RD(read);
   1.534 +        src2   : RD(read);
   1.535 +        DECODE : ID;
   1.536 +	BR     : RD;
   1.537 + %}
   1.538 +
   1.539 +//No.14 Floating FPU reg operation : dst <-- op reg  
   1.540 + pipe_class fpu1_regF(regF dst, regF src) %{
   1.541 + 	src    : RD(read);
   1.542 +        dst    : WB(write);
   1.543 +        DECODE : ID;
   1.544 + 	FPU    : CA;
   1.545 + %}
   1.546 +
   1.547 + pipe_class long_memory_op() %{
   1.548 +	instruction_count(10); multiple_bundles; force_serialization;
   1.549 +	fixed_latency(30);
   1.550 + %}
   1.551 +
   1.552 + pipe_class simple_call() %{
   1.553 +	instruction_count(10); multiple_bundles; force_serialization;
   1.554 +	fixed_latency(200);
   1.555 +	BR     : RD;
   1.556 + %}
   1.557 +
   1.558 + pipe_class call() %{
   1.559 +	instruction_count(10); multiple_bundles; force_serialization;
   1.560 +	fixed_latency(200);
   1.561 + %}
   1.562 +
   1.563 + //FIXME:
   1.564 + //No.9 Piple slow : for multi-instructions 
   1.565 + pipe_class pipe_slow(  ) %{
   1.566 +	instruction_count(20);
   1.567 +        force_serialization;
   1.568 +        multiple_bundles;
   1.569 +	fixed_latency(50);
   1.570 + %}
   1.571 +
   1.572 +%}
   1.573 +
   1.574  
   1.575  
   1.576  //----------INSTRUCTIONS-------------------------------------------------------
   1.577 @@ -4724,7 +4719,7 @@
   1.578    ins_cost(125);
   1.579    format %{ "lw    $dst, $mem 	#@loadI" %}
   1.580    ins_encode (load_I_enc(dst, mem));
   1.581 -  ins_pipe( ialu_reg_mem );
   1.582 +  ins_pipe( ialu_loadI );
   1.583  %}
   1.584  
   1.585  // Load Long.
   1.586 @@ -4735,7 +4730,7 @@
   1.587    ins_cost(250);
   1.588    format %{ "ld    $dst, $mem   #@loadL" %}
   1.589    ins_encode(load_L_enc(dst, mem));
   1.590 -  ins_pipe( ialu_reg_long_mem );
   1.591 +  ins_pipe( ialu_loadL );
   1.592  %}
   1.593  
   1.594  // Load Long - UNaligned
   1.595 @@ -4746,7 +4741,7 @@
   1.596    ins_cost(450);
   1.597    format %{ "ld    $dst, $mem   #@loadL_unaligned\n\t" %}
   1.598    ins_encode(load_L_enc(dst, mem));
   1.599 -  ins_pipe( ialu_reg_long_mem );
   1.600 +  ins_pipe( ialu_loadL );
   1.601  %}
   1.602  
   1.603  // Store Long
   1.604 @@ -4757,7 +4752,7 @@
   1.605    ins_cost(200);
   1.606    format %{ "sd    $mem,   $src #@storeL_reg\n" %}
   1.607    ins_encode(store_L_reg_enc(mem, src));
   1.608 -  ins_pipe( ialu_mem_long_reg );
   1.609 +  ins_pipe( ialu_storeL );
   1.610  %}
   1.611  
   1.612  //FIXME:volatile! atomic!
   1.613 @@ -4806,7 +4801,7 @@
   1.614      }
   1.615  
   1.616    %}
   1.617 -  ins_pipe( ialu_mem_long_reg );
   1.618 +  ins_pipe( ialu_storeL );
   1.619  %}
   1.620  
   1.621  instruct storeL_immL0(memory mem, immL0 zero) %{
   1.622 @@ -4815,7 +4810,7 @@
   1.623    ins_cost(180);
   1.624    format %{ "sd    $mem,   zero #@storeL_immL0" %}
   1.625    ins_encode(store_L_immL0_enc(mem, zero));
   1.626 -  ins_pipe( ialu_mem_long_reg );
   1.627 +  ins_pipe( ialu_storeL );
   1.628  %}
   1.629  
   1.630  instruct storeL_imm(memory mem, immL src) %{
   1.631 @@ -4824,7 +4819,7 @@
   1.632    ins_cost(200);
   1.633    format %{ "sw    $mem,   $src #@storeL_imm" %}
   1.634    ins_encode(store_L_immL_enc(mem, src));
   1.635 -  ins_pipe( ialu_mem_long_reg );
   1.636 +  ins_pipe( ialu_storeL );
   1.637  %}
   1.638  
   1.639  // Load Compressed Pointer
   1.640 @@ -4841,7 +4836,7 @@
   1.641     %}
   1.642  */
   1.643    ins_encode (load_N_enc(dst, mem));
   1.644 -   ins_pipe(ialu_reg_mem); // XXX
   1.645 +   ins_pipe( ialu_loadI ); // XXX
   1.646  %}
   1.647  
   1.648  // Load Pointer
   1.649 @@ -4851,7 +4846,7 @@
   1.650    ins_cost(125);
   1.651    format %{ "ld    $dst, $mem #@loadP" %}
   1.652    ins_encode (load_P_enc(dst, mem));
   1.653 -  ins_pipe( ialu_reg_mem );
   1.654 +  ins_pipe( ialu_loadI );
   1.655  %}
   1.656  
   1.657  // Load Klass Pointer
   1.658 @@ -4861,7 +4856,7 @@
   1.659    ins_cost(125);
   1.660    format %{ "MOV    $dst,$mem @ loadKlass" %}
   1.661    ins_encode (load_P_enc(dst, mem));
   1.662 -  ins_pipe( ialu_reg_mem );
   1.663 +  ins_pipe( ialu_loadI );
   1.664  %}
   1.665  
   1.666  // Load narrow Klass Pointer
   1.667 @@ -4877,7 +4872,7 @@
   1.668      __ lwu($dst$$Register, $mem$$Address);
   1.669    %}
   1.670  */
   1.671 -  ins_pipe(ialu_reg_mem); // XXX
   1.672 +  ins_pipe( ialu_loadI ); // XXX
   1.673  %}
   1.674  
   1.675  // Load Constant
   1.676 @@ -4890,7 +4885,7 @@
   1.677      int    value = $src$$constant;
   1.678      __ move(dst, value);
   1.679    %}
   1.680 -  ins_pipe( ialu_reg_fat );
   1.681 +  ins_pipe( ialu_regI_regI );
   1.682  %}
   1.683  
   1.684  
   1.685 @@ -4904,7 +4899,7 @@
   1.686      Register dst_reg = as_Register($dst$$reg);
   1.687      __ li(dst_reg, (long)$src$$constant);
   1.688    %}
   1.689 -  ins_pipe( ialu_reg_long_fat );
   1.690 +  ins_pipe( ialu_regL_regL );
   1.691  %}
   1.692  
   1.693  
   1.694 @@ -4915,7 +4910,7 @@
   1.695    ins_cost(125);
   1.696    format %{ "MOV    $dst,$mem @ loadRange" %}
   1.697    ins_encode(load_I_enc(dst, mem));
   1.698 -  ins_pipe( ialu_reg_mem );
   1.699 +  ins_pipe( ialu_loadI );
   1.700  %}
   1.701  
   1.702  
   1.703 @@ -4925,7 +4920,7 @@
   1.704    ins_cost(125);
   1.705    format %{ "sd    $src, $mem #@storeP" %}
   1.706    ins_encode(store_P_reg_enc(mem, src));
   1.707 -  ins_pipe( ialu_mem_reg );
   1.708 +  ins_pipe( ialu_storeI );
   1.709  %}
   1.710  
   1.711  /*
   1.712 @@ -4951,7 +4946,7 @@
   1.713    ins_cost(150);
   1.714    format %{ "mov    $mem, $src #@storeImmP" %}
   1.715    ins_encode(store_P_immP_enc(mem, src));
   1.716 -  ins_pipe( ialu_mem_imm );
   1.717 +  ins_pipe( ialu_storeI );
   1.718  %}
   1.719  
   1.720  // Store Byte Immediate
   1.721 @@ -4961,7 +4956,7 @@
   1.722    ins_cost(150);
   1.723    format %{ "movb   $mem, $src #@storeImmB" %}
   1.724    ins_encode(store_B_immI_enc(mem, src));
   1.725 -  ins_pipe( ialu_mem_imm );
   1.726 +  ins_pipe( ialu_storeI );
   1.727  %}
   1.728  
   1.729  // Store Compressed Pointer
   1.730 @@ -4972,7 +4967,7 @@
   1.731    ins_cost(125); // XXX
   1.732    format %{ "sw    $mem, $src\t# compressed ptr @ storeN" %}
   1.733    ins_encode(store_N_reg_enc(mem, src)); 
   1.734 -  ins_pipe(ialu_mem_reg);
   1.735 +  ins_pipe( ialu_storeI );
   1.736  %}
   1.737  
   1.738  instruct storeNKlass(memory mem, mRegN src)
   1.739 @@ -4982,7 +4977,7 @@
   1.740    ins_cost(125); // XXX
   1.741    format %{ "sw    $mem, $src\t# compressed klass ptr" %}
   1.742    ins_encode(store_N_reg_enc(mem, src));
   1.743 -  ins_pipe(ialu_mem_reg);
   1.744 +  ins_pipe( ialu_storeI );
   1.745  %}
   1.746  
   1.747  instruct storeImmN0(memory mem, immN0 zero)
   1.748 @@ -4993,7 +4988,7 @@
   1.749    ins_cost(125); // XXX
   1.750    format %{ "storeN0    $mem, R12\t# compressed ptr (R12_heapbase==0)" %}
   1.751    ins_encode(storeImmN0_enc(mem, zero));
   1.752 -  ins_pipe(ialu_mem_reg);
   1.753 +  ins_pipe( ialu_storeI );
   1.754  %}
   1.755  
   1.756  instruct storeImmN(memory mem, immN src)
   1.757 @@ -5003,7 +4998,7 @@
   1.758    ins_cost(150); // XXX
   1.759    format %{ "storeImmN    $mem, $src\t# compressed ptr @ storeImmN" %}
   1.760    ins_encode(storeImmN_enc(mem, src));
   1.761 -  ins_pipe(ialu_mem_imm);
   1.762 +  ins_pipe( ialu_storeI );
   1.763  %}
   1.764  
   1.765  instruct storeImmNKlass(memory mem, immNKlass src)
   1.766 @@ -5013,7 +5008,7 @@
   1.767    ins_cost(150); // XXX
   1.768    format %{ "sw    $mem, $src\t# compressed klass ptr" %}
   1.769    ins_encode(storeImmNKlass_enc(mem, src));
   1.770 -  ins_pipe(ialu_mem_imm);
   1.771 +  ins_pipe( ialu_storeI );
   1.772  %}
   1.773  
   1.774  // Store Byte
   1.775 @@ -5023,7 +5018,7 @@
   1.776    ins_cost(125);
   1.777    format %{ "sb    $src, $mem #@storeB" %}
   1.778    ins_encode(store_B_reg_enc(mem, src));
   1.779 -  ins_pipe( ialu_mem_reg );
   1.780 +  ins_pipe( ialu_storeI );
   1.781  %}
   1.782  
   1.783  // Load Byte (8bit signed)
   1.784 @@ -5033,7 +5028,7 @@
   1.785    ins_cost(125);
   1.786    format %{ "lb   $dst, $mem #@loadB" %}
   1.787    ins_encode(load_B_enc(dst, mem));
   1.788 -  ins_pipe( ialu_reg_mem );
   1.789 +  ins_pipe( ialu_loadI );
   1.790  %}
   1.791  
   1.792  // Load Byte (8bit UNsigned)
   1.793 @@ -5043,7 +5038,7 @@
   1.794    ins_cost(125);
   1.795    format %{ "lbu   $dst, $mem #@loadUB" %}
   1.796    ins_encode(load_UB_enc(dst, mem));
   1.797 -  ins_pipe( ialu_reg_mem );
   1.798 +  ins_pipe( ialu_loadI );
   1.799  %}
   1.800  
   1.801  // Load Short (16bit signed)
   1.802 @@ -5053,7 +5048,7 @@
   1.803    ins_cost(125);
   1.804    format %{ "lh   $dst, $mem #@loadS" %}
   1.805    ins_encode(load_S_enc(dst, mem));
   1.806 -  ins_pipe( ialu_reg_mem );
   1.807 +  ins_pipe( ialu_loadI );
   1.808  %}
   1.809  
   1.810  //TODO: check if it is necessery to do 'prefetch' in the future(which means never). LEE
   1.811 @@ -5074,7 +5069,7 @@
   1.812    ins_cost(150);
   1.813    format %{ "mov    $mem, $src #@storeImmI" %}
   1.814    ins_encode(store_I_immI_enc(mem, src));
   1.815 -  ins_pipe( ialu_mem_imm );
   1.816 +  ins_pipe( ialu_storeI );
   1.817  %}
   1.818  
   1.819  // Store Integer
   1.820 @@ -5084,7 +5079,7 @@
   1.821    ins_cost(125);
   1.822    format %{ "sw    $mem, $src #@storeI" %}
   1.823    ins_encode(store_I_reg_enc(mem, src));
   1.824 -  ins_pipe( ialu_mem_reg );
   1.825 +  ins_pipe( ialu_storeI );
   1.826  %}
   1.827  
   1.828  // Load Float
   1.829 @@ -5094,7 +5089,7 @@
   1.830    ins_cost(150);
   1.831    format %{ "loadF $dst, $mem #@loadF" %}
   1.832    ins_encode(load_F_enc(dst, mem));
   1.833 -  ins_pipe( fpu_reg_mem );
   1.834 +  ins_pipe( ialu_loadI );
   1.835  %}
   1.836  
   1.837  instruct loadConP(mRegP dst, immP src) %{
   1.838 @@ -5132,7 +5127,7 @@
   1.839      }
   1.840    %}
   1.841  
   1.842 -  ins_pipe( ialu_reg_fat );
   1.843 +  ins_pipe( ialu_regI_regI );
   1.844  %}
   1.845  
   1.846  instruct loadConP0(mRegP dst, immP0 src)
   1.847 @@ -5145,7 +5140,7 @@
   1.848  		Register dst_reg = $dst$$Register;
   1.849  		__ move(dst_reg, R0);
   1.850  	%}
   1.851 -  ins_pipe(ialu_reg);
   1.852 +  ins_pipe( ialu_regI_regI );
   1.853  %}
   1.854  
   1.855  instruct loadConN0(mRegN dst, immN0 src, FlagsReg cr) %{
   1.856 @@ -5155,7 +5150,7 @@
   1.857    ins_encode %{
   1.858      __ move($dst$$Register, R0);
   1.859    %}
   1.860 -  ins_pipe(ialu_reg);
   1.861 +  ins_pipe( ialu_regI_regI );
   1.862  %}
   1.863  
   1.864  instruct loadConN(mRegN dst, immN src) %{
   1.865 @@ -5185,7 +5180,7 @@
   1.866  		}
   1.867      }
   1.868    %}
   1.869 -  ins_pipe(ialu_reg_fat); // XXX
   1.870 +  ins_pipe( ialu_regI_regI ); // XXX
   1.871  %}
   1.872  
   1.873  instruct loadConNKlass(mRegN dst, immNKlass src) %{
   1.874 @@ -5214,7 +5209,7 @@
   1.875  		}
   1.876      }
   1.877    %}
   1.878 -  ins_pipe(ialu_reg_fat); // XXX
   1.879 +  ins_pipe( ialu_regI_regI ); // XXX
   1.880  %}
   1.881  
   1.882  /*
   1.883 @@ -5297,7 +5292,7 @@
   1.884      __ nop();
   1.885    %}
   1.886  
   1.887 -  ins_pipe( pipe_jmp );
   1.888 +  ins_pipe( pipe_jump );
   1.889  %}
   1.890  
   1.891  // Create exception oop: created by stack-crawling runtime code.
   1.892 @@ -5314,7 +5309,7 @@
   1.893      __ block_comment("CreateException is empty in X86/MIPS");
   1.894    %}
   1.895    ins_pipe( empty );
   1.896 -//  ins_pipe( pipe_jmp );
   1.897 +//  ins_pipe( pipe_jump );
   1.898  %}
   1.899  
   1.900  
   1.901 @@ -5438,7 +5433,7 @@
   1.902      __ jr(T9);
   1.903      __ nop();
   1.904    %}
   1.905 -  ins_pipe( pipe_jmp );
   1.906 +  ins_pipe( pipe_jump );
   1.907  %}
   1.908  
   1.909  instruct branchConP_zero(cmpOpU cmp, mRegP op1, immP0 zero, label labl) %{
   1.910 @@ -5505,7 +5500,7 @@
   1.911    %}
   1.912  
   1.913    ins_pc_relative(1);
   1.914 -  ins_pipe(pipe_branchP);
   1.915 +  ins_pipe( pipe_alu_branch );
   1.916  %}
   1.917  
   1.918  
   1.919 @@ -5572,7 +5567,7 @@
   1.920    %}
   1.921  
   1.922    ins_pc_relative(1);
   1.923 -  ins_pipe(pipe_branchP);
   1.924 +  ins_pipe( pipe_alu_branch );
   1.925  %}
   1.926  
   1.927  instruct cmpN_null_branch(cmpOp cmp, mRegN op1, immN0 null, label labl) %{
   1.928 @@ -5609,7 +5604,7 @@
   1.929    %}
   1.930  //TODO: pipe_branchP or create pipe_branchN LEE
   1.931    ins_pc_relative(1);
   1.932 -  ins_pipe(pipe_branchP);
   1.933 +  ins_pipe( pipe_alu_branch );
   1.934  %}
   1.935  
   1.936  instruct cmpN_reg_branch(cmpOp cmp, mRegN op1, mRegN op2, label labl) %{
   1.937 @@ -5673,7 +5668,7 @@
   1.938      __ nop();
   1.939    %}
   1.940    ins_pc_relative(1);
   1.941 -  ins_pipe(pipe_branchP);
   1.942 +  ins_pipe( pipe_alu_branch );
   1.943  %}
   1.944  
   1.945  instruct branchConIU_reg_reg(cmpOpU cmp, mRegI src1, mRegI src2, label labl) %{
   1.946 @@ -5736,7 +5731,7 @@
   1.947    %}
   1.948  
   1.949    ins_pc_relative(1);
   1.950 -  ins_pipe(pipe_branchP);
   1.951 +  ins_pipe( pipe_alu_branch );
   1.952  %}
   1.953  
   1.954  
   1.955 @@ -5801,7 +5796,7 @@
   1.956    %}
   1.957  
   1.958    ins_pc_relative(1);
   1.959 -  ins_pipe(pipe_branchP);
   1.960 +  ins_pipe( pipe_alu_branch );
   1.961  %}
   1.962  
   1.963  instruct branchConI_reg_reg(cmpOp cmp, mRegI src1, mRegI src2, label labl) %{
   1.964 @@ -5864,7 +5859,7 @@
   1.965    %}
   1.966  
   1.967    ins_pc_relative(1);
   1.968 -  ins_pipe(pipe_branchP);
   1.969 +  ins_pipe( pipe_alu_branch );
   1.970  %}
   1.971  
   1.972  instruct branchConI_reg_imm0(cmpOp cmp, mRegI src1, immI0 src2, label labl) %{
   1.973 @@ -5925,7 +5920,7 @@
   1.974    %}
   1.975  
   1.976    ins_pc_relative(1);
   1.977 -  ins_pipe(pipe_branchP);
   1.978 +  ins_pipe( pipe_alu_branch );
   1.979  %}
   1.980  
   1.981  
   1.982 @@ -5991,7 +5986,7 @@
   1.983    %}
   1.984  
   1.985    ins_pc_relative(1);
   1.986 -  ins_pipe(pipe_branchP);
   1.987 +  ins_pipe( pipe_alu_branch );
   1.988  %}
   1.989  
   1.990  instruct branchConIU_reg_imm0(cmpOpU cmp, mRegI src1, immI0 zero, label labl) %{
   1.991 @@ -6046,7 +6041,7 @@
   1.992    %}
   1.993  
   1.994    ins_pc_relative(1);
   1.995 -  ins_pipe(pipe_branchP);
   1.996 +  ins_pipe( pipe_alu_branch );
   1.997  %}
   1.998  
   1.999  
  1.1000 @@ -6115,7 +6110,7 @@
  1.1001    %}
  1.1002  
  1.1003    ins_pc_relative(1);
  1.1004 -  ins_pipe(pipe_branchP);
  1.1005 +  ins_pipe( pipe_alu_branch );
  1.1006  %}
  1.1007  
  1.1008  
  1.1009 @@ -6197,7 +6192,7 @@
  1.1010  
  1.1011  
  1.1012    ins_pc_relative(1);
  1.1013 -  ins_pipe(pipe_branchP);
  1.1014 +  ins_pipe( pipe_alu_branch );
  1.1015  %}
  1.1016  
  1.1017  instruct branchConI_reg_imm16_sub(cmpOp cmp, mRegI src1, immI16_sub src2, label labl) %{
  1.1018 @@ -6258,7 +6253,7 @@
  1.1019    %}
  1.1020  
  1.1021    ins_pc_relative(1);
  1.1022 -  ins_pipe(pipe_branchP);
  1.1023 +  ins_pipe( pipe_alu_branch );
  1.1024  %}
  1.1025  
  1.1026  instruct branchConL_regL_immL0(cmpOp cmp, mRegL src1, immL0 zero, label labl) %{
  1.1027 @@ -6325,7 +6320,7 @@
  1.1028  
  1.1029  
  1.1030    ins_pc_relative(1);
  1.1031 -  ins_pipe(pipe_branchP);
  1.1032 +  ins_pipe( pipe_alu_branch );
  1.1033  %}
  1.1034  
  1.1035  /*
  1.1036 @@ -6589,7 +6584,7 @@
  1.1037  		__ move(dst, src);
  1.1038    %}
  1.1039    ins_cost(10);
  1.1040 -  ins_pipe(ialu_reg_reg);
  1.1041 +  ins_pipe( ialu_regI_mov );
  1.1042  %}
  1.1043  
  1.1044  instruct castP2X(mRegL dst, mRegP src ) %{
  1.1045 @@ -6603,7 +6598,7 @@
  1.1046  	if(src != dst)
  1.1047  		__ move(dst, src);    
  1.1048    %}
  1.1049 -  ins_pipe( ialu_reg_reg );
  1.1050 +  ins_pipe( ialu_regI_mov );
  1.1051  %}
  1.1052  
  1.1053  instruct MoveF2I_reg_reg(mRegI dst, regF src) %{
  1.1054 @@ -6716,7 +6711,7 @@
  1.1055      }  
  1.1056    %}
  1.1057  
  1.1058 -  ins_pipe( pipe_cmov_reg );
  1.1059 +  ins_pipe( pipe_slow );
  1.1060  %}
  1.1061  
  1.1062  instruct cmovI_cmpP_reg_reg(mRegI dst, mRegI src, mRegP tmp1, mRegP tmp2, cmpOpU cop ) %{
  1.1063 @@ -6770,7 +6765,7 @@
  1.1064      }  
  1.1065    %}
  1.1066  
  1.1067 -  ins_pipe( pipe_cmov_reg );
  1.1068 +  ins_pipe( pipe_slow );
  1.1069  %}
  1.1070  
  1.1071  instruct cmovI_cmpN_reg_reg(mRegI dst, mRegI src, mRegN tmp1, mRegN tmp2, cmpOpU cop ) %{
  1.1072 @@ -6824,7 +6819,7 @@
  1.1073      }  
  1.1074    %}
  1.1075  
  1.1076 -  ins_pipe( pipe_cmov_reg );
  1.1077 +  ins_pipe( pipe_slow );
  1.1078  %}
  1.1079  
  1.1080  instruct cmovP_cmpN_reg_reg(mRegP dst, mRegP src, mRegN tmp1, mRegN tmp2, cmpOpU cop ) %{
  1.1081 @@ -6878,7 +6873,7 @@
  1.1082      }  
  1.1083    %}
  1.1084  
  1.1085 -  ins_pipe( pipe_cmov_reg );
  1.1086 +  ins_pipe( pipe_slow );
  1.1087  %}
  1.1088  
  1.1089  instruct cmovN_cmpP_reg_reg(mRegN dst, mRegN src, mRegP tmp1, mRegP tmp2, cmpOpU cop ) %{
  1.1090 @@ -6932,7 +6927,7 @@
  1.1091      }  
  1.1092    %}
  1.1093  
  1.1094 -  ins_pipe( pipe_cmov_reg );
  1.1095 +  ins_pipe( pipe_slow );
  1.1096  %}
  1.1097  
  1.1098  instruct cmovP_cmpD_reg_reg(mRegP dst, mRegP src, regD tmp1, regD tmp2, cmpOp cop ) %{
  1.1099 @@ -6981,7 +6976,7 @@
  1.1100      }  
  1.1101    %}
  1.1102  
  1.1103 -  ins_pipe( pipe_cmov_reg );
  1.1104 +  ins_pipe( pipe_slow );
  1.1105  %}
  1.1106  
  1.1107  
  1.1108 @@ -7036,7 +7031,7 @@
  1.1109      }  
  1.1110    %}
  1.1111  
  1.1112 -  ins_pipe( pipe_cmov_reg );
  1.1113 +  ins_pipe( pipe_slow );
  1.1114  %}
  1.1115  
  1.1116  
  1.1117 @@ -7091,7 +7086,7 @@
  1.1118      }  
  1.1119    %}
  1.1120  
  1.1121 -  ins_pipe( pipe_cmov_reg );
  1.1122 +  ins_pipe( pipe_slow );
  1.1123  %}
  1.1124  
  1.1125  instruct cmovI_cmpL_reg_reg(mRegI dst, mRegI src, mRegL tmp1, mRegL tmp2, cmpOp cop ) %{
  1.1126 @@ -7145,7 +7140,7 @@
  1.1127      }  
  1.1128    %}
  1.1129  
  1.1130 -  ins_pipe( pipe_cmov_reg );
  1.1131 +  ins_pipe( pipe_slow );
  1.1132  %}
  1.1133  
  1.1134  instruct cmovP_cmpL_reg_reg(mRegP dst, mRegP src, mRegL tmp1, mRegL tmp2, cmpOp cop ) %{
  1.1135 @@ -7199,7 +7194,7 @@
  1.1136      }  
  1.1137    %}
  1.1138  
  1.1139 -  ins_pipe( pipe_cmov_reg );
  1.1140 +  ins_pipe( pipe_slow );
  1.1141  %}
  1.1142  
  1.1143  instruct cmovI_cmpD_reg_reg(mRegI dst, mRegI src, regD tmp1, regD tmp2, cmpOp cop ) %{
  1.1144 @@ -7249,7 +7244,7 @@
  1.1145      }  
  1.1146    %}
  1.1147  
  1.1148 -  ins_pipe( pipe_cmov_reg );
  1.1149 +  ins_pipe( pipe_slow );
  1.1150  %}
  1.1151  
  1.1152  
  1.1153 @@ -7304,7 +7299,7 @@
  1.1154      }  
  1.1155    %}
  1.1156  
  1.1157 -  ins_pipe( pipe_cmov_reg );
  1.1158 +  ins_pipe( pipe_slow );
  1.1159  %}
  1.1160  
  1.1161  instruct cmovP_cmpI_reg_reg(mRegP dst, mRegP src, mRegI tmp1, mRegI tmp2, cmpOp cop ) %{
  1.1162 @@ -7358,7 +7353,7 @@
  1.1163      }  
  1.1164    %}
  1.1165  
  1.1166 -  ins_pipe( pipe_cmov_reg );
  1.1167 +  ins_pipe( pipe_slow );
  1.1168  %}
  1.1169  
  1.1170  instruct cmovN_cmpI_reg_reg(mRegN dst, mRegN src, mRegI tmp1, mRegI tmp2, cmpOp cop ) %{
  1.1171 @@ -7412,7 +7407,7 @@
  1.1172      }  
  1.1173    %}
  1.1174  
  1.1175 -  ins_pipe( pipe_cmov_reg );
  1.1176 +  ins_pipe( pipe_slow );
  1.1177  %}
  1.1178  
  1.1179  
  1.1180 @@ -7468,7 +7463,7 @@
  1.1181      }  
  1.1182    %}
  1.1183  
  1.1184 -  ins_pipe( pipe_cmov_reg_long );
  1.1185 +  ins_pipe( pipe_slow );
  1.1186  %}
  1.1187  
  1.1188  instruct cmovL_cmpL_reg_reg(mRegL dst, mRegL src, mRegL tmp1, mRegL tmp2, cmpOp cop ) %{
  1.1189 @@ -7522,7 +7517,7 @@
  1.1190      }  
  1.1191    %}
  1.1192  
  1.1193 -  ins_pipe( pipe_cmov_reg_long );
  1.1194 +  ins_pipe( pipe_slow );
  1.1195  %}
  1.1196  
  1.1197  instruct cmovL_cmpN_reg_reg(mRegL dst, mRegL src, mRegN tmp1, mRegN tmp2, cmpOpU cop ) %{
  1.1198 @@ -7576,7 +7571,7 @@
  1.1199      }  
  1.1200    %}
  1.1201  
  1.1202 -  ins_pipe( pipe_cmov_reg );
  1.1203 +  ins_pipe( pipe_slow );
  1.1204  %}
  1.1205  
  1.1206  
  1.1207 @@ -7626,7 +7621,7 @@
  1.1208      }  
  1.1209    %}
  1.1210  
  1.1211 -  ins_pipe( pipe_cmov_reg );
  1.1212 +  ins_pipe( pipe_slow );
  1.1213  %}
  1.1214  
  1.1215  instruct cmovD_cmpD_reg_reg(regD dst, regD src, regD tmp1, regD tmp2, cmpOp cop ) %{
  1.1216 @@ -7696,7 +7691,7 @@
  1.1217      }  
  1.1218    %}
  1.1219  
  1.1220 -  ins_pipe( pipe_cmov_reg );
  1.1221 +  ins_pipe( pipe_slow );
  1.1222  %}
  1.1223  
  1.1224  instruct cmovF_cmpI_reg_reg(regF dst, regF src, mRegI tmp1, mRegI tmp2, cmpOp cop ) %{
  1.1225 @@ -8218,7 +8213,7 @@
  1.1226      Register src2 = $src2$$Register;
  1.1227      __ addu32(dst, src1, src2);
  1.1228    %}
  1.1229 -  ins_pipe( ialu_reg );
  1.1230 +  ins_pipe( ialu_regI_regI );
  1.1231  %}
  1.1232  
  1.1233  instruct addI_Reg_imm(mRegI dst, mRegI src1,  immI src2) %{
  1.1234 @@ -8237,7 +8232,7 @@
  1.1235         __ addu32(dst, src1, AT);
  1.1236      }
  1.1237    %}
  1.1238 -  ins_pipe( ialu_reg );
  1.1239 +  ins_pipe( ialu_regI_regI );
  1.1240  %}
  1.1241  
  1.1242  instruct addP_reg_reg(mRegP dst, mRegP src1, mRegL src2) %{
  1.1243 @@ -8252,7 +8247,7 @@
  1.1244      __ daddu(dst, src1, src2);  
  1.1245    %}
  1.1246  
  1.1247 -  ins_pipe( ialu_reg_reg );
  1.1248 +  ins_pipe( ialu_regI_regI );
  1.1249  %}
  1.1250  
  1.1251  instruct addP_reg_imm(mRegP dst, mRegP src1,  immL32 src2) %{
  1.1252 @@ -8272,7 +8267,7 @@
  1.1253         __ daddu(dst, src1, AT);
  1.1254      }
  1.1255    %}
  1.1256 -  ins_pipe( ialu_reg_imm );
  1.1257 +  ins_pipe( ialu_regI_imm16 );
  1.1258  %}
  1.1259  
  1.1260  // Add Long Register with Register
  1.1261 @@ -8289,7 +8284,7 @@
  1.1262      __ daddu(dst_reg, src1_reg, src2_reg);
  1.1263    %}
  1.1264  
  1.1265 -  ins_pipe( ialu_reg_reg_long );
  1.1266 +  ins_pipe( ialu_regL_regL );
  1.1267  %}
  1.1268  
  1.1269  //----------Subtraction Instructions-------------------------------------------
  1.1270 @@ -8304,7 +8299,7 @@
  1.1271      Register src2 = $src2$$Register;
  1.1272      __ subu32(dst, src1, src2);
  1.1273    %}
  1.1274 -  ins_pipe( ialu_reg );
  1.1275 +  ins_pipe( ialu_regI_regI );
  1.1276  %}
  1.1277  
  1.1278  instruct subI_Reg_imm(mRegI dst, mRegI src1,  immI src2) %{
  1.1279 @@ -8317,7 +8312,7 @@
  1.1280      __ move(AT, -1 * $src2$$constant);
  1.1281      __ addu32(dst, src1, AT);
  1.1282    %}
  1.1283 -  ins_pipe( ialu_reg );
  1.1284 +  ins_pipe( ialu_regI_regI );
  1.1285  %}
  1.1286  
  1.1287  // Subtract Long Register with Register.
  1.1288 @@ -8332,7 +8327,7 @@
  1.1289  
  1.1290      __ subu(dst, src1, src2);
  1.1291    %}
  1.1292 -  ins_pipe( ialu_reg_reg_long );
  1.1293 +  ins_pipe( ialu_regL_regL );
  1.1294  %}
  1.1295  
  1.1296  // Integer MOD with Register
  1.1297 @@ -8350,8 +8345,8 @@
  1.1298      __ mfhi(dst);  
  1.1299    %}
  1.1300  
  1.1301 -  //ins_pipe( ialu_reg_reg_alu0 );
  1.1302 -  ins_pipe( ialu_reg );
  1.1303 +  //ins_pipe( ialu_mod );
  1.1304 +  ins_pipe( ialu_regI_regI );
  1.1305  %}
  1.1306  
  1.1307  instruct modL_reg_reg(mRegL dst, mRegL src1, mRegL src2) %{
  1.1308 @@ -8381,7 +8376,7 @@
  1.1309           
  1.1310       __ mul(dst, src1, src2);
  1.1311    %}
  1.1312 -  ins_pipe( ialu_reg_reg_alu0 );
  1.1313 +  ins_pipe( ialu_mult );
  1.1314  %}
  1.1315  
  1.1316  instruct maddI_Reg_Reg(mRegI dst, mRegI src1, mRegI src2, mRegI src3) %{
  1.1317 @@ -8399,7 +8394,7 @@
  1.1318       __ madd(src1, src2);
  1.1319       __ mflo(dst);
  1.1320    %}
  1.1321 -  ins_pipe( ialu_reg_reg_alu0 );
  1.1322 +  ins_pipe( ialu_mult );
  1.1323  %}
  1.1324  
  1.1325  instruct divI_Reg_Reg(mRegI dst, mRegI src1, mRegI src2) %{
  1.1326 @@ -8421,7 +8416,7 @@
  1.1327      __ nop();
  1.1328      __ mflo(dst);
  1.1329    %}
  1.1330 -  ins_pipe( ialu_reg_reg_alu0 );
  1.1331 +  ins_pipe( ialu_mod );
  1.1332  %}
  1.1333  
  1.1334  instruct divF_Reg_Reg(regF dst, regF src1, regF src2) %{
  1.1335 @@ -8520,7 +8515,7 @@
  1.1336  
  1.1337      __ add_s(dst, src1, src2);  
  1.1338    %}
  1.1339 -  ins_pipe( fpu_reg_reg );
  1.1340 +  ins_pipe( fpu_regF_regF );
  1.1341  %}
  1.1342  
  1.1343  instruct subF_reg_reg(regF dst, regF src1, regF src2) %{
  1.1344 @@ -8533,7 +8528,7 @@
  1.1345  
  1.1346      __ sub_s(dst, src1, src2);  
  1.1347    %}
  1.1348 -  ins_pipe( fpu_reg_reg );
  1.1349 +  ins_pipe( fpu_regF_regF );
  1.1350  %}
  1.1351  instruct addD_reg_reg(regD dst, regD src1, regD src2) %{
  1.1352    match(Set dst (AddD src1 src2));
  1.1353 @@ -8545,7 +8540,7 @@
  1.1354  
  1.1355      __ add_d(dst, src1, src2);  
  1.1356    %}
  1.1357 -  ins_pipe( fpu_reg_reg );
  1.1358 +  ins_pipe( fpu_regF_regF );
  1.1359  %}
  1.1360  
  1.1361  instruct subD_reg_reg(regD dst, regD src1, regD src2) %{
  1.1362 @@ -8558,7 +8553,7 @@
  1.1363  
  1.1364      __ sub_d(dst, src1, src2);  
  1.1365    %}
  1.1366 -  ins_pipe( fpu_reg_reg );
  1.1367 +  ins_pipe( fpu_regF_regF );
  1.1368  %}
  1.1369  
  1.1370  instruct negF_reg(regF dst, regF src) %{
  1.1371 @@ -8570,7 +8565,7 @@
  1.1372  
  1.1373      __ neg_s(dst, src);
  1.1374    %}
  1.1375 -  ins_pipe( fpu_reg_reg );
  1.1376 +  ins_pipe( fpu_regF_regF );
  1.1377  %}
  1.1378  
  1.1379  instruct negD_reg(regD dst, regD src) %{
  1.1380 @@ -8582,7 +8577,7 @@
  1.1381  
  1.1382      __ neg_d(dst, src);  
  1.1383    %}
  1.1384 -  ins_pipe( fpu_reg_reg );
  1.1385 +  ins_pipe( fpu_regF_regF );
  1.1386  %}
  1.1387  
  1.1388  
  1.1389 @@ -8596,7 +8591,7 @@
  1.1390  
  1.1391      __ mul_s(dst, src1, src2);  
  1.1392    %}
  1.1393 -  ins_pipe( fpu_reg_reg );
  1.1394 +  ins_pipe( fpu_regF_regF );
  1.1395  %}
  1.1396  
  1.1397  // Mul two double precision floating piont number
  1.1398 @@ -8610,7 +8605,7 @@
  1.1399  
  1.1400      __ mul_d(dst, src1, src2);  
  1.1401    %}
  1.1402 -  ins_pipe( fpu_reg_reg );
  1.1403 +  ins_pipe( fpu_regF_regF );
  1.1404  %}
  1.1405  
  1.1406  instruct absF_reg(regF dst, regF src) %{
  1.1407 @@ -8623,7 +8618,7 @@
  1.1408  
  1.1409      __ abs_s(dst, src);  
  1.1410    %}
  1.1411 -  ins_pipe( fpu_reg_reg );
  1.1412 +  ins_pipe( fpu_regF_regF );
  1.1413  %}
  1.1414  
  1.1415  
  1.1416 @@ -8640,7 +8635,7 @@
  1.1417  
  1.1418      __ abs_d(dst, src);  
  1.1419    %}
  1.1420 -  ins_pipe( fpu_reg_reg );
  1.1421 +  ins_pipe( fpu_regF_regF );
  1.1422  %}
  1.1423  
  1.1424  instruct sqrtD_reg(regD dst, regD src) %{
  1.1425 @@ -8653,7 +8648,7 @@
  1.1426  
  1.1427      __ sqrt_d(dst, src);  
  1.1428    %}
  1.1429 -  ins_pipe( fpu_reg_reg );
  1.1430 +  ins_pipe( fpu_regF_regF );
  1.1431  %}
  1.1432  
  1.1433  //----------------------------------Logical Instructions----------------------
  1.1434 @@ -8673,7 +8668,7 @@
  1.1435         __ move(AT, val);
  1.1436         __ andr(dst, src, AT);
  1.1437    %}
  1.1438 -  ins_pipe( ialu_reg );
  1.1439 +  ins_pipe( ialu_regI_regI );
  1.1440  %}
  1.1441  
  1.1442  instruct andI_Reg_imm_0_65535(mRegI dst, mRegI src1,  immI_0_65535 src2) %{
  1.1443 @@ -8688,7 +8683,7 @@
  1.1444      
  1.1445         __ andi(dst, src, val);
  1.1446    %}
  1.1447 -  ins_pipe( ialu_reg );
  1.1448 +  ins_pipe( ialu_regI_regI );
  1.1449  %}
  1.1450  
  1.1451  instruct andI_Reg_Reg(mRegI dst, mRegI src1,  mRegI src2) %{
  1.1452 @@ -8701,7 +8696,7 @@
  1.1453      Register src2 = $src2$$Register;
  1.1454      __ andr(dst, src1, src2);
  1.1455    %}
  1.1456 -  ins_pipe( ialu_reg );
  1.1457 +  ins_pipe( ialu_regI_regI );
  1.1458  %}
  1.1459  
  1.1460  // And Long Register with Register
  1.1461 @@ -8715,7 +8710,7 @@
  1.1462  
  1.1463      __ andr(dst_reg, src1_reg, src2_reg);
  1.1464    %}
  1.1465 -  ins_pipe( ialu_reg_reg_long );
  1.1466 +  ins_pipe( ialu_regL_regL );
  1.1467  %}
  1.1468  
  1.1469  // Or Long Register with Register
  1.1470 @@ -8729,7 +8724,7 @@
  1.1471  
  1.1472      __ orr(dst_reg, src1_reg, src2_reg);
  1.1473    %}
  1.1474 -  ins_pipe( ialu_reg_reg_long );
  1.1475 +  ins_pipe( ialu_regL_regL );
  1.1476  %}
  1.1477  
  1.1478  // Xor Long Register with Register
  1.1479 @@ -8743,7 +8738,7 @@
  1.1480  
  1.1481      __ xorr(dst_reg, src1_reg, src2_reg);
  1.1482    %}
  1.1483 -  ins_pipe( ialu_reg_reg_long );
  1.1484 +  ins_pipe( ialu_regL_regL );
  1.1485  %}
  1.1486  
  1.1487  // Shift Left by 8-bit immediate
  1.1488 @@ -8770,7 +8765,7 @@
  1.1489         __ sllv(dst, src, AT);
  1.1490      }
  1.1491    %}
  1.1492 -  ins_pipe( ialu_reg );
  1.1493 +  ins_pipe( ialu_regI_regI );
  1.1494  %}
  1.1495  
  1.1496  // Shift Left by 8-bit immediate
  1.1497 @@ -8784,7 +8779,7 @@
  1.1498      Register shamt = $shift$$Register;
  1.1499      __ sllv(dst, src, shamt);
  1.1500    %}
  1.1501 -  ins_pipe( ialu_reg );
  1.1502 +  ins_pipe( ialu_regI_regI );
  1.1503  %}
  1.1504  
  1.1505  
  1.1506 @@ -8807,7 +8802,7 @@
  1.1507         __ dsllv(dst_reg, src_reg, AT);
  1.1508      }
  1.1509    %}
  1.1510 -  ins_pipe( ialu_reg_long );
  1.1511 +  ins_pipe( ialu_regL_regL );
  1.1512  %}
  1.1513  
  1.1514  
  1.1515 @@ -8826,7 +8821,7 @@
  1.1516      __ andi(creg, creg, 0x3f);
  1.1517  	__ dsllv(dst_reg, src_reg, creg);
  1.1518    %}
  1.1519 -  ins_pipe( ialu_reg_long );
  1.1520 +  ins_pipe( ialu_regL_regL );
  1.1521  %}
  1.1522  
  1.1523  // Shift Right Long 
  1.1524 @@ -8847,7 +8842,7 @@
  1.1525  	__ dsrav(dst_reg, src_reg, AT);
  1.1526      }
  1.1527    %}
  1.1528 -  ins_pipe( ialu_reg_long );
  1.1529 +  ins_pipe( ialu_regL_regL );
  1.1530  %}
  1.1531  
  1.1532  // Shift Right Long arithmetically
  1.1533 @@ -8865,7 +8860,7 @@
  1.1534      __ andi(creg, creg, 0x3f);
  1.1535  	__ dsrav(dst_reg, src_reg, creg);
  1.1536    %}
  1.1537 -  ins_pipe( ialu_reg_long );
  1.1538 +  ins_pipe( ialu_regL_regL );
  1.1539  %}
  1.1540  
  1.1541  // Shift Right Long logically
  1.1542 @@ -8883,7 +8878,7 @@
  1.1543      __ andi(creg, creg, 0x3f); 
  1.1544  	__ dsrlv(dst_reg, src_reg, creg);
  1.1545    %}
  1.1546 -  ins_pipe( ialu_reg_long );
  1.1547 +  ins_pipe( ialu_regL_regL );
  1.1548  %}
  1.1549  
  1.1550  
  1.1551 @@ -8902,7 +8897,7 @@
  1.1552      __ sll(dst, dst, 0); /* long -> int */
  1.1553    %}
  1.1554  
  1.1555 -  ins_pipe( ialu_reg_reg );
  1.1556 +  ins_pipe( ialu_regI_regI );
  1.1557  %}
  1.1558  
  1.1559  // Or Instructions
  1.1560 @@ -8918,7 +8913,7 @@
  1.1561      __ orr(dst, src1, src2);
  1.1562    %}
  1.1563  
  1.1564 -  ins_pipe( ialu_reg_reg );
  1.1565 +  ins_pipe( ialu_regI_regI );
  1.1566  %}
  1.1567  
  1.1568  instruct orI_Reg_castP2X(mRegL dst, mRegL src1, mRegP src2) %{
  1.1569 @@ -8932,7 +8927,7 @@
  1.1570      __ orr(dst, src1, src2);
  1.1571    %}
  1.1572  
  1.1573 -  ins_pipe( ialu_reg_reg );
  1.1574 +  ins_pipe( ialu_regI_regI );
  1.1575  %}
  1.1576  
  1.1577  // Logical Shift Right by 8-bit immediate
  1.1578 @@ -8953,7 +8948,7 @@
  1.1579        __ srlv(dst, src, AT);
  1.1580      }
  1.1581    %}
  1.1582 -  ins_pipe( ialu_reg );
  1.1583 +  ins_pipe( ialu_regI_regI );
  1.1584  %}
  1.1585  
  1.1586  // Logical Shift Right 
  1.1587 @@ -8967,7 +8962,7 @@
  1.1588      Register shift = $shift$$Register;
  1.1589      __ srlv(dst, src, shift);
  1.1590    %}
  1.1591 -  ins_pipe( ialu_reg );
  1.1592 +  ins_pipe( ialu_regI_regI );
  1.1593  %}
  1.1594  
  1.1595  
  1.1596 @@ -8982,7 +8977,7 @@
  1.1597      int    shift = $shift$$constant;
  1.1598      __ sra(dst, src, shift);
  1.1599    %}
  1.1600 -  ins_pipe( ialu_reg );
  1.1601 +  ins_pipe( ialu_regI_regI );
  1.1602  %}
  1.1603  
  1.1604  instruct shr_arith_Reg_Reg(mRegI dst, mRegI src, mRegI shift) %{
  1.1605 @@ -8996,7 +8991,7 @@
  1.1606      Register shift = $shift$$Register;
  1.1607      __ srav(dst, src, shift);
  1.1608    %}
  1.1609 -  ins_pipe( ialu_reg );
  1.1610 +  ins_pipe( ialu_regI_regI );
  1.1611  %}
  1.1612  
  1.1613  //----------Convert Int to Boolean---------------------------------------------
  1.1614 @@ -9009,7 +9004,7 @@
  1.1615      Register  src = $src$$Register;
  1.1616      __ move(dst, src);
  1.1617    %}
  1.1618 -  ins_pipe( ialu_reg_reg );
  1.1619 +  ins_pipe( ialu_regI_regI );
  1.1620  %}
  1.1621  
  1.1622  instruct ci2b(mRegI dst, mRegI src) %{
  1.1623 @@ -9032,7 +9027,7 @@
  1.1624      __ addu(dst, dst, AT);
  1.1625    %}
  1.1626  
  1.1627 -  ins_pipe( ialu_reg_reg_long );
  1.1628 +  ins_pipe( ialu_regL_regL );
  1.1629  %}
  1.1630  
  1.1631  
  1.1632 @@ -9056,7 +9051,7 @@
  1.1633  
  1.1634      if(dst != src) __ sll(dst, src, 0);
  1.1635    %}
  1.1636 -  ins_pipe( ialu_reg_reg_long );
  1.1637 +  ins_pipe( ialu_regL_regL );
  1.1638  %}
  1.1639  
  1.1640  
  1.1641 @@ -9072,7 +9067,7 @@
  1.1642      __ dsra32(dst, dst, 0);
  1.1643    %}
  1.1644  
  1.1645 -  ins_pipe( ialu_reg_reg );
  1.1646 +  ins_pipe( ialu_regI_regI );
  1.1647  %}
  1.1648  
  1.1649  instruct convL2D_reg( regD dst, mRegL src ) %{
  1.1650 @@ -9224,7 +9219,7 @@
  1.1651      __ cvt_s_w(dst, dst);
  1.1652    %}
  1.1653  
  1.1654 -  ins_pipe( fpu_reg_reg );
  1.1655 +  ins_pipe( fpu_regF_regF );
  1.1656  %}
  1.1657  
  1.1658  instruct cmpLTMask( mRegI dst, mRegI p, mRegI q ) %{
  1.1659 @@ -9252,7 +9247,7 @@
  1.1660      __ addu(dst, src, R0);
  1.1661    %}
  1.1662  //  ins_encode( enc_Copy( dst, src) );
  1.1663 -  ins_pipe( ialu_reg_reg );
  1.1664 +  ins_pipe( ialu_regI_regI );
  1.1665  %}
  1.1666  
  1.1667  //FIXME
  1.1668 @@ -9275,7 +9270,7 @@
  1.1669      __ addu(dst, dst, AT);
  1.1670    %}
  1.1671  
  1.1672 -  ins_pipe( ialu_reg_reg_long );
  1.1673 +  ins_pipe( ialu_regL_regL );
  1.1674  %}
  1.1675  
  1.1676  instruct convP2B( mRegI dst, mRegP src ) %{
  1.1677 @@ -9296,7 +9291,7 @@
  1.1678       __ mtc1(src, dst);
  1.1679       __ cvt_d_w(dst, dst);
  1.1680    %}
  1.1681 -  ins_pipe( fpu_reg_reg );
  1.1682 +  ins_pipe( fpu_regF_regF );
  1.1683  %}
  1.1684  
  1.1685  instruct convF2I_reg_reg(mRegI dst, regF src) %{
  1.1686 @@ -9308,7 +9303,7 @@
  1.1687  
  1.1688      __ cvt_d_s(dst, src);
  1.1689    %}
  1.1690 -  ins_pipe( fpu_reg_reg );
  1.1691 +  ins_pipe( fpu_regF_regF );
  1.1692  %}
  1.1693  
  1.1694  instruct convF2D_reg_reg(regD dst, regF src) %{
  1.1695 @@ -9320,7 +9315,7 @@
  1.1696  
  1.1697      __ cvt_d_s(dst, src);
  1.1698    %}
  1.1699 -  ins_pipe( fpu_reg_reg );
  1.1700 +  ins_pipe( fpu_regF_regF );
  1.1701  %}
  1.1702  
  1.1703  instruct convD2F_reg_reg(regF dst, regD src) %{
  1.1704 @@ -9332,7 +9327,7 @@
  1.1705  
  1.1706      __ cvt_s_d(dst, src);
  1.1707    %}
  1.1708 -  ins_pipe( fpu_reg_reg );
  1.1709 +  ins_pipe( fpu_regF_regF );
  1.1710  %}
  1.1711  
  1.1712  // Convert a double to an int.  If the double is a NAN, stuff a zero in instead.
  1.1713 @@ -9377,7 +9372,7 @@
  1.1714      }
  1.1715      __ encode_heap_oop(dst);
  1.1716    %}
  1.1717 -  ins_pipe(ialu_reg_long);
  1.1718 +  ins_pipe( ialu_regL_regL );
  1.1719  %}
  1.1720  
  1.1721  instruct encodeHeapOop_not_null(mRegN dst, mRegP src, FlagsReg cr) %{
  1.1722 @@ -9388,7 +9383,7 @@
  1.1723    ins_encode %{
  1.1724      __ encode_heap_oop_not_null($dst$$Register, $src$$Register);
  1.1725    %}
  1.1726 -  ins_pipe(ialu_reg_long);
  1.1727 +  ins_pipe( ialu_regL_regL );
  1.1728  %}
  1.1729  
  1.1730  instruct decodeHeapOop(mRegP dst, mRegN src) %{
  1.1731 @@ -9404,7 +9399,7 @@
  1.1732      }
  1.1733      __ decode_heap_oop(d);
  1.1734    %}
  1.1735 -  ins_pipe(ialu_reg_long);
  1.1736 +  ins_pipe( ialu_regL_regL );
  1.1737  %}
  1.1738  
  1.1739  instruct decodeHeapOop_not_null(mRegP dst, mRegN src) %{
  1.1740 @@ -9421,7 +9416,7 @@
  1.1741        __ decode_heap_oop_not_null(d);
  1.1742      }
  1.1743    %}
  1.1744 -  ins_pipe(ialu_reg_long);
  1.1745 +  ins_pipe( ialu_regL_regL );
  1.1746  %}
  1.1747  
  1.1748  instruct encodeKlass_not_null(mRegN dst, mRegP src, FlagsReg cr) %{
  1.1749 @@ -9431,7 +9426,7 @@
  1.1750    ins_encode %{
  1.1751      __ encode_klass_not_null($dst$$Register, $src$$Register);
  1.1752    %}
  1.1753 -  ins_pipe(ialu_reg_long);
  1.1754 +  ins_pipe( ialu_regL_regL );
  1.1755  %}
  1.1756  
  1.1757  instruct decodeKlass_not_null(mRegP dst, mRegN src, FlagsReg cr) %{
  1.1758 @@ -9447,7 +9442,7 @@
  1.1759        __ decode_klass_not_null(d);
  1.1760      }
  1.1761    %}
  1.1762 -  ins_pipe(ialu_reg_long);
  1.1763 +  ins_pipe( ialu_regL_regL );
  1.1764  %}
  1.1765  
  1.1766  //FIXME
  1.1767 @@ -9465,7 +9460,7 @@
  1.1768  #endif
  1.1769    %}
  1.1770  
  1.1771 -  ins_pipe(ialu_none);
  1.1772 +  ins_pipe( ialu_loadI );
  1.1773  %}
  1.1774  
  1.1775  
  1.1776 @@ -9506,7 +9501,7 @@
  1.1777     __ nop();
  1.1778    %}
  1.1779  
  1.1780 -  ins_pipe( pipe_jmp );
  1.1781 +  ins_pipe( pipe_jump );
  1.1782  %}
  1.1783  
  1.1784  
  1.1785 @@ -9527,7 +9522,7 @@
  1.1786      __ nop();
  1.1787    %}
  1.1788  
  1.1789 -    ins_pipe( pipe_jmp );
  1.1790 +    ins_pipe( pipe_jump );
  1.1791      ins_pc_relative(1);
  1.1792  %}
  1.1793  
  1.1794 @@ -9561,7 +9556,7 @@
  1.1795      __ jr(target);  
  1.1796      __ nop();
  1.1797    %}
  1.1798 -  ins_pipe( pipe_jmp ); 
  1.1799 +  ins_pipe( pipe_jump ); 
  1.1800  %}
  1.1801  
  1.1802  // ============================================================================
  1.1803 @@ -9643,7 +9638,7 @@
  1.1804    // opcode(0xB7, 0x0F);
  1.1805    // ins_encode( OpcS, OpcP, RegMem(dst,mem));
  1.1806    ins_encode(load_C_enc(dst, mem));
  1.1807 -  ins_pipe( ialu_reg_mem );
  1.1808 +  ins_pipe( ialu_loadI );
  1.1809  %}
  1.1810  
  1.1811  // Store Char (16bit unsigned)
  1.1812 @@ -9653,7 +9648,7 @@
  1.1813    ins_cost(125);
  1.1814    format %{ "storeC  $src,$mem @ storeC" %}
  1.1815    ins_encode(store_C_reg_enc(mem, src));
  1.1816 -  ins_pipe( ialu_reg_mem );
  1.1817 +  ins_pipe( ialu_loadI );
  1.1818  %}
  1.1819  
  1.1820  
  1.1821 @@ -9667,7 +9662,7 @@
  1.1822  
  1.1823      __ mtc1(R0, dst);
  1.1824    %}
  1.1825 -  ins_pipe( fpu_reg_con );
  1.1826 +  ins_pipe( fpu_loadF );
  1.1827  %}
  1.1828  
  1.1829  
  1.1830 @@ -9686,7 +9681,7 @@
  1.1831      __ li(AT, const_addr);
  1.1832      __ lwc1(dst, AT, 0);
  1.1833    %}
  1.1834 -  ins_pipe( fpu_reg_con );
  1.1835 +  ins_pipe( fpu_loadF );
  1.1836  %}
  1.1837  
  1.1838  
  1.1839 @@ -9700,7 +9695,7 @@
  1.1840  
  1.1841        __ dmtc1(R0, dst);
  1.1842    %}
  1.1843 -  ins_pipe( fpu_reg_con );
  1.1844 +  ins_pipe( fpu_loadF );
  1.1845  %}
  1.1846  
  1.1847  instruct loadConD(regD dst, immD src) %{
  1.1848 @@ -9719,7 +9714,7 @@
  1.1849      __ li(AT, const_addr);
  1.1850      __ ldc1(dst_reg, AT, 0);
  1.1851    %}
  1.1852 -  ins_pipe( fpu_reg_con );
  1.1853 +  ins_pipe( fpu_loadF );
  1.1854  %}
  1.1855  
  1.1856  // Store register Float value (it is faster than store from FPU register)
  1.1857 @@ -9729,7 +9724,7 @@
  1.1858    ins_cost(50);
  1.1859    format %{ "store   $mem, $src\t# store float @ storeF_reg" %}
  1.1860    ins_encode(store_F_reg_enc(mem, src));
  1.1861 -  ins_pipe( fpu_mem_reg );
  1.1862 +  ins_pipe( fpu_storeF );
  1.1863  %}
  1.1864  
  1.1865  
  1.1866 @@ -9775,7 +9770,7 @@
  1.1867         }
  1.1868      }
  1.1869    %}
  1.1870 -  ins_pipe( ialu_mem_imm );
  1.1871 +  ins_pipe( ialu_storeI );
  1.1872  %}
  1.1873  
  1.1874  instruct storeF_imm0( memory mem, immF0 zero) %{
  1.1875 @@ -9814,7 +9809,7 @@
  1.1876         }
  1.1877      }
  1.1878    %}
  1.1879 -  ins_pipe( ialu_mem_imm );
  1.1880 +  ins_pipe( ialu_storeI );
  1.1881  %}
  1.1882  
  1.1883  // Load Double
  1.1884 @@ -9824,7 +9819,7 @@
  1.1885    ins_cost(150);
  1.1886    format %{ "loadD   $dst, $mem #@loadD" %}
  1.1887    ins_encode(load_D_enc(dst, mem));
  1.1888 -  ins_pipe( fpu_reg_mem );
  1.1889 +  ins_pipe( ialu_loadI );
  1.1890  %}
  1.1891  
  1.1892  // Load Double - UNaligned
  1.1893 @@ -9834,7 +9829,7 @@
  1.1894    // FIXME: Jin: Need more effective ldl/ldr
  1.1895    format %{ "loadD_unaligned   $dst, $mem #@loadD_unaligned" %}
  1.1896    ins_encode(load_D_enc(dst, mem));
  1.1897 -  ins_pipe( fpu_reg_mem );
  1.1898 +  ins_pipe( ialu_loadI );
  1.1899  %}
  1.1900  
  1.1901  instruct storeD_reg( memory mem, regD src) %{
  1.1902 @@ -9843,7 +9838,7 @@
  1.1903    ins_cost(50);
  1.1904    format %{ "store   $mem, $src\t# store float @ storeD_reg" %}
  1.1905    ins_encode(store_D_reg_enc(mem, src));
  1.1906 -  ins_pipe( fpu_mem_reg );
  1.1907 +  ins_pipe( fpu_storeF );
  1.1908  %}
  1.1909  
  1.1910  instruct storeD_imm0( memory mem, immD0 zero) %{
  1.1911 @@ -9885,7 +9880,7 @@
  1.1912         }
  1.1913      }
  1.1914    %}
  1.1915 -  ins_pipe( ialu_mem_imm );
  1.1916 +  ins_pipe( ialu_storeI );
  1.1917  %}
  1.1918  
  1.1919  instruct cmpFastLock( FlagsReg cr, mRegP object, mRegP box, mRegI tmp, mRegP scr) %{
  1.1920 @@ -9922,7 +9917,7 @@
  1.1921    format %{ "MOV8   $mem,$src\t! CMS card-mark imm0" %}
  1.1922  //  opcode(0xC6);
  1.1923    ins_encode(store_B_immI_enc(mem, src));
  1.1924 -  ins_pipe( ialu_mem_reg );
  1.1925 +  ins_pipe( ialu_storeI );
  1.1926  %}
  1.1927  
  1.1928  // Die now
  1.1929 @@ -9939,7 +9934,7 @@
  1.1930      __ stop("in ShoudNotReachHere");
  1.1931  
  1.1932    %}
  1.1933 -  ins_pipe(pipe_jmp);
  1.1934 +  ins_pipe( pipe_jump );
  1.1935  %}
  1.1936  
  1.1937  
  1.1938 @@ -10003,7 +9998,7 @@
  1.1939      }  
  1.1940      __ nop();
  1.1941    %}
  1.1942 -  ins_pipe( pipe_jcc );
  1.1943 +  ins_pipe( pipe_jump );
  1.1944    ins_pc_relative(1);
  1.1945  %}
  1.1946  
  1.1947 @@ -10065,7 +10060,7 @@
  1.1948      }  
  1.1949      __ nop();
  1.1950    %}
  1.1951 -  ins_pipe( pipe_jcc );
  1.1952 +  ins_pipe( pipe_jump );
  1.1953    ins_pc_relative(1);
  1.1954  %}
  1.1955   
  1.1956 @@ -10081,7 +10076,7 @@
  1.1957    size(6);
  1.1958    opcode(0x0F, 0x80);
  1.1959    ins_encode( Jcc( cop, labl) );
  1.1960 -  ins_pipe( pipe_jcc );
  1.1961 +  ins_pipe( pipe_jump );
  1.1962    ins_pc_relative(1);
  1.1963  %}
  1.1964  
  1.1965 @@ -10093,7 +10088,7 @@
  1.1966    format %{ "J$cop,u  $labl\t# Loop end" %}
  1.1967    opcode(0x0F, 0x80);
  1.1968    ins_encode( Jcc( cop, labl) );
  1.1969 -  ins_pipe( pipe_jcc );
  1.1970 +  ins_pipe( pipe_jump );
  1.1971    ins_pc_relative(1);
  1.1972  %}
  1.1973  */
  1.1974 @@ -10128,7 +10123,7 @@
  1.1975      __ nop();
  1.1976    %}
  1.1977  
  1.1978 -  ins_pipe( pipe_jcc );
  1.1979 +  ins_pipe( pipe_jump );
  1.1980    ins_pc_relative(1);
  1.1981  %}
  1.1982  
  1.1983 @@ -10187,7 +10182,7 @@
  1.1984      }
  1.1985  %}
  1.1986  
  1.1987 -  ins_pipe( pipe_cmpxchg );
  1.1988 +  ins_pipe( long_memory_op );
  1.1989  %}
  1.1990  
  1.1991  // Conditional-store of a long value.
  1.1992 @@ -10216,7 +10211,7 @@
  1.1993  			__ cmpxchg(newval, addr, oldval);
  1.1994  		}
  1.1995    %}
  1.1996 -  ins_pipe(pipe_cmpxchg);
  1.1997 +  ins_pipe( long_memory_op );
  1.1998  %}
  1.1999  
  1.2000  
  1.2001 @@ -10239,7 +10234,7 @@
  1.2002      __ cmpxchg32(newval, addr, oldval);
  1.2003      __ move(res, AT);
  1.2004    %}
  1.2005 -  ins_pipe( pipe_cmpxchg );
  1.2006 +  ins_pipe( long_memory_op );
  1.2007  %}
  1.2008  
  1.2009  //FIXME:
  1.2010 @@ -10259,7 +10254,7 @@
  1.2011      __ cmpxchg(newval, addr, oldval);
  1.2012      __ move(res, AT);
  1.2013    %}
  1.2014 -  ins_pipe( pipe_cmpxchg );
  1.2015 +  ins_pipe( long_memory_op );
  1.2016  %}
  1.2017  
  1.2018  instruct compareAndSwapN( mRegI res, mRegP mem_ptr, t2_RegN oldval, mRegN newval) %{
  1.2019 @@ -10283,7 +10278,7 @@
  1.2020      __ cmpxchg32(newval, addr, oldval);
  1.2021      __ move(res, AT);
  1.2022    %}
  1.2023 -  ins_pipe( pipe_cmpxchg );
  1.2024 +  ins_pipe( long_memory_op );
  1.2025  %}
  1.2026  
  1.2027  //----------Max and Min--------------------------------------------------------
  1.2028 @@ -10397,7 +10392,7 @@
  1.2029  #endif
  1.2030    %}
  1.2031  
  1.2032 -  ins_pipe( ialu_mem_imm );
  1.2033 +  ins_pipe( ialu_storeI );
  1.2034  %}
  1.2035  
  1.2036  //----------PEEPHOLE RULES-----------------------------------------------------

mercurial