5284 instruct loadB(iRegI dst, memory mem) %{ |
5284 instruct loadB(iRegI dst, memory mem) %{ |
5285 match(Set dst (LoadB mem)); |
5285 match(Set dst (LoadB mem)); |
5286 ins_cost(MEMORY_REF_COST); |
5286 ins_cost(MEMORY_REF_COST); |
5287 |
5287 |
5288 size(4); |
5288 size(4); |
5289 format %{ "LDSB $mem,$dst" %} |
5289 format %{ "LDSB $mem,$dst\t! byte" %} |
5290 opcode(Assembler::ldsb_op3); |
5290 opcode(Assembler::ldsb_op3); |
5291 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5291 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5292 ins_pipe(iload_mask_mem); |
5292 ins_pipe(iload_mask_mem); |
5293 %} |
5293 %} |
5294 |
5294 |
5295 // Load Byte (8bit UNsigned) into an int reg |
5295 // Load Byte (8bit signed) into a Long Register |
5296 instruct loadUB(iRegI dst, memory mem, immI_255 bytemask) %{ |
5296 instruct loadB2L(iRegL dst, memory mem) %{ |
5297 match(Set dst (AndI (LoadB mem) bytemask)); |
5297 match(Set dst (ConvI2L (LoadB mem))); |
5298 ins_cost(MEMORY_REF_COST); |
5298 ins_cost(MEMORY_REF_COST); |
5299 |
5299 |
5300 size(4); |
5300 size(4); |
5301 format %{ "LDUB $mem,$dst" %} |
5301 format %{ "LDSB $mem,$dst\t! byte -> long" %} |
|
5302 opcode(Assembler::ldsb_op3); |
|
5303 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
|
5304 ins_pipe(iload_mask_mem); |
|
5305 %} |
|
5306 |
|
5307 // Load Unsigned Byte (8bit UNsigned) into an int reg |
|
5308 instruct loadUB(iRegI dst, memory mem) %{ |
|
5309 match(Set dst (LoadUB mem)); |
|
5310 ins_cost(MEMORY_REF_COST); |
|
5311 |
|
5312 size(4); |
|
5313 format %{ "LDUB $mem,$dst\t! ubyte" %} |
5302 opcode(Assembler::ldub_op3); |
5314 opcode(Assembler::ldub_op3); |
5303 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5315 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5304 ins_pipe(iload_mask_mem); |
5316 ins_pipe(iload_mask_mem); |
5305 %} |
5317 %} |
5306 |
5318 |
5307 // Load Byte (8bit UNsigned) into a Long Register |
5319 // Load Unsigned Byte (8bit UNsigned) into a Long Register |
5308 instruct loadUBL(iRegL dst, memory mem, immL_FF bytemask) %{ |
5320 instruct loadUB2L(iRegL dst, memory mem) %{ |
5309 match(Set dst (AndL (ConvI2L (LoadB mem)) bytemask)); |
5321 match(Set dst (ConvI2L (LoadUB mem))); |
5310 ins_cost(MEMORY_REF_COST); |
5322 ins_cost(MEMORY_REF_COST); |
5311 |
5323 |
5312 size(4); |
5324 size(4); |
5313 format %{ "LDUB $mem,$dst" %} |
5325 format %{ "LDUB $mem,$dst\t! ubyte -> long" %} |
5314 opcode(Assembler::ldub_op3); |
5326 opcode(Assembler::ldub_op3); |
5315 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5327 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5316 ins_pipe(iload_mask_mem); |
5328 ins_pipe(iload_mask_mem); |
5317 %} |
5329 %} |
5318 |
5330 |
5319 // Load Unsigned Short/Char (16bit UNsigned) into a Long Register |
5331 // Load Short (16bit signed) |
5320 instruct loadUS2L(iRegL dst, memory mem, immL_FFFF bytemask) %{ |
5332 instruct loadS(iRegI dst, memory mem) %{ |
5321 match(Set dst (AndL (ConvI2L (LoadUS mem)) bytemask)); |
5333 match(Set dst (LoadS mem)); |
5322 ins_cost(MEMORY_REF_COST); |
5334 ins_cost(MEMORY_REF_COST); |
5323 |
5335 |
5324 size(4); |
5336 size(4); |
5325 format %{ "LDUH $mem,$dst" %} |
5337 format %{ "LDSH $mem,$dst\t! short" %} |
|
5338 opcode(Assembler::ldsh_op3); |
|
5339 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
|
5340 ins_pipe(iload_mask_mem); |
|
5341 %} |
|
5342 |
|
5343 // Load Short (16bit signed) into a Long Register |
|
5344 instruct loadS2L(iRegL dst, memory mem) %{ |
|
5345 match(Set dst (ConvI2L (LoadS mem))); |
|
5346 ins_cost(MEMORY_REF_COST); |
|
5347 |
|
5348 size(4); |
|
5349 format %{ "LDSH $mem,$dst\t! short -> long" %} |
|
5350 opcode(Assembler::ldsh_op3); |
|
5351 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
|
5352 ins_pipe(iload_mask_mem); |
|
5353 %} |
|
5354 |
|
5355 // Load Unsigned Short/Char (16bit UNsigned) |
|
5356 instruct loadUS(iRegI dst, memory mem) %{ |
|
5357 match(Set dst (LoadUS mem)); |
|
5358 ins_cost(MEMORY_REF_COST); |
|
5359 |
|
5360 size(4); |
|
5361 format %{ "LDUH $mem,$dst\t! ushort/char" %} |
5326 opcode(Assembler::lduh_op3); |
5362 opcode(Assembler::lduh_op3); |
5327 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5363 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5328 ins_pipe(iload_mask_mem); |
5364 ins_pipe(iload_mask_mem); |
5329 %} |
5365 %} |
5330 |
5366 |
5331 // Load Unsigned Short/Char (16bit unsigned) |
5367 // Load Unsigned Short/Char (16bit UNsigned) into a Long Register |
5332 instruct loadUS(iRegI dst, memory mem) %{ |
5368 instruct loadUS2L(iRegL dst, memory mem) %{ |
5333 match(Set dst (LoadUS mem)); |
5369 match(Set dst (ConvI2L (LoadUS mem))); |
5334 ins_cost(MEMORY_REF_COST); |
5370 ins_cost(MEMORY_REF_COST); |
5335 |
5371 |
5336 size(4); |
5372 size(4); |
5337 format %{ "LDUH $mem,$dst" %} |
5373 format %{ "LDUH $mem,$dst\t! ushort/char -> long" %} |
5338 opcode(Assembler::lduh_op3); |
5374 opcode(Assembler::lduh_op3); |
5339 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5375 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5340 ins_pipe(iload_mask_mem); |
5376 ins_pipe(iload_mask_mem); |
5341 %} |
5377 %} |
5342 |
5378 |
5343 // Load Integer |
5379 // Load Integer |
5344 instruct loadI(iRegI dst, memory mem) %{ |
5380 instruct loadI(iRegI dst, memory mem) %{ |
5345 match(Set dst (LoadI mem)); |
5381 match(Set dst (LoadI mem)); |
5346 ins_cost(MEMORY_REF_COST); |
5382 ins_cost(MEMORY_REF_COST); |
5347 size(4); |
5383 |
5348 |
5384 size(4); |
5349 format %{ "LDUW $mem,$dst" %} |
5385 format %{ "LDUW $mem,$dst\t! int" %} |
|
5386 opcode(Assembler::lduw_op3); |
|
5387 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
|
5388 ins_pipe(iload_mem); |
|
5389 %} |
|
5390 |
|
5391 // Load Integer into a Long Register |
|
5392 instruct loadI2L(iRegL dst, memory mem) %{ |
|
5393 match(Set dst (ConvI2L (LoadI mem))); |
|
5394 ins_cost(MEMORY_REF_COST); |
|
5395 |
|
5396 size(4); |
|
5397 format %{ "LDSW $mem,$dst\t! int -> long" %} |
|
5398 opcode(Assembler::ldsw_op3); |
|
5399 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
|
5400 ins_pipe(iload_mem); |
|
5401 %} |
|
5402 |
|
5403 // Load Unsigned Integer into a Long Register |
|
5404 instruct loadUI2L(iRegL dst, memory mem) %{ |
|
5405 match(Set dst (LoadUI2L mem)); |
|
5406 ins_cost(MEMORY_REF_COST); |
|
5407 |
|
5408 size(4); |
|
5409 format %{ "LDUW $mem,$dst\t! uint -> long" %} |
5350 opcode(Assembler::lduw_op3); |
5410 opcode(Assembler::lduw_op3); |
5351 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5411 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5352 ins_pipe(iload_mem); |
5412 ins_pipe(iload_mem); |
5353 %} |
5413 %} |
5354 |
5414 |
5355 // Load Long - aligned |
5415 // Load Long - aligned |
5356 instruct loadL(iRegL dst, memory mem ) %{ |
5416 instruct loadL(iRegL dst, memory mem ) %{ |
5357 match(Set dst (LoadL mem)); |
5417 match(Set dst (LoadL mem)); |
5358 ins_cost(MEMORY_REF_COST); |
5418 ins_cost(MEMORY_REF_COST); |
|
5419 |
5359 size(4); |
5420 size(4); |
5360 format %{ "LDX $mem,$dst\t! long" %} |
5421 format %{ "LDX $mem,$dst\t! long" %} |
5361 opcode(Assembler::ldx_op3); |
5422 opcode(Assembler::ldx_op3); |
5362 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5423 ins_encode(simple_form3_mem_reg( mem, dst ) ); |
5363 ins_pipe(iload_mem); |
5424 ins_pipe(iload_mem); |