Mercurial > hg > graal-jvmci-8
comparison c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java @ 1426:ed6bd46ad55e
small cleanup
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Wed, 18 Aug 2010 11:44:04 -0700 |
parents | 98fffb304868 |
children | 149b1d2316de |
comparison
equal
deleted
inserted
replaced
1425:98fffb304868 | 1426:ed6bd46ad55e |
---|---|
125 newInstanceTemplate = buildNewInstance(); | 125 newInstanceTemplate = buildNewInstance(); |
126 | 126 |
127 return templates; | 127 return templates; |
128 } | 128 } |
129 | 129 |
130 private XirTemplate buildNewInstance() { | |
131 XirOperand result = asm.restart(CiKind.Word); | |
132 XirOperand type = asm.createInputParameter("type", CiKind.Object); | |
133 XirOperand instanceSize = asm.createConstantInputParameter("instance size", CiKind.Word); | |
134 | |
135 XirOperand thread = asm.createRegister("thread", CiKind.Word, AMD64.r15); | |
136 XirOperand temp1 = asm.createTemp("temp1", CiKind.Word); | |
137 XirOperand temp2 = asm.createTemp("temp2", CiKind.Word); | |
138 XirLabel tlabFull = asm.createOutOfLineLabel("tlab full"); | |
139 XirLabel resume = asm.createInlineLabel("resume"); | |
140 | |
141 asm.pload(CiKind.Word, result, thread, asm.i(config.threadTlabTopOffset), false); | |
142 asm.add(temp1, result, instanceSize); | |
143 asm.pload(CiKind.Word, temp2, thread, asm.i(config.threadTlabEndOffset), false); | |
144 | |
145 asm.jgt(tlabFull, temp1, temp2); | |
146 asm.pstore(CiKind.Word, thread, asm.i(config.threadTlabTopOffset), temp1, false); | |
147 asm.bindInline(resume); | |
148 | |
149 asm.pload(CiKind.Word, temp1, type, asm.i(config.instanceHeaderPrototypeOffset), false); | |
150 asm.pstore(CiKind.Word, result, temp1, false); | |
151 asm.pstore(CiKind.Object, result, asm.i(config.hubOffset), type, false); | |
152 | |
153 asm.bindOutOfLine(tlabFull); | |
154 XirOperand arg = asm.createRegister("runtime call argument", CiKind.Object, AMD64.rdx); | |
155 asm.mov(arg, type); | |
156 asm.callRuntime(config.newInstanceStub, result); | |
157 asm.jmp(resume); | |
158 | |
159 return asm.finishTemplate("new instance"); | |
160 } | |
161 | |
162 private XirTemplate buildPrologue(boolean staticMethod) { | 130 private XirTemplate buildPrologue(boolean staticMethod) { |
163 asm.restart(CiKind.Void); | 131 asm.restart(CiKind.Void); |
164 XirOperand temp = asm.createRegister("temp (rax)", CiKind.Int, AMD64.rax); | 132 XirOperand temp = asm.createRegister("temp (rax)", CiKind.Int, AMD64.rax); |
165 XirOperand frame_pointer = asm.createRegister("frame pointer", CiKind.Word, AMD64.rbp); | 133 XirOperand frame_pointer = asm.createRegister("frame pointer", CiKind.Word, AMD64.rbp); |
166 | 134 |
428 asm.bindOutOfLine(dummy); | 396 asm.bindOutOfLine(dummy); |
429 | 397 |
430 return asm.finishTemplate(addr, "invokespecial"); | 398 return asm.finishTemplate(addr, "invokespecial"); |
431 } | 399 } |
432 | 400 |
401 private XirTemplate buildNewInstance() { | |
402 XirOperand result = asm.restart(CiKind.Word); | |
403 XirOperand type = asm.createInputParameter("type", CiKind.Object); | |
404 XirOperand instanceSize = asm.createConstantInputParameter("instance size", CiKind.Word); | |
405 | |
406 XirOperand thread = asm.createRegister("thread", CiKind.Word, AMD64.r15); | |
407 XirOperand temp1 = asm.createTemp("temp1", CiKind.Word); | |
408 XirOperand temp2 = asm.createTemp("temp2", CiKind.Word); | |
409 XirLabel tlabFull = asm.createOutOfLineLabel("tlab full"); | |
410 XirLabel resume = asm.createInlineLabel("resume"); | |
411 | |
412 asm.pload(CiKind.Word, result, thread, asm.i(config.threadTlabTopOffset), false); | |
413 asm.add(temp1, result, instanceSize); | |
414 asm.pload(CiKind.Word, temp2, thread, asm.i(config.threadTlabEndOffset), false); | |
415 | |
416 asm.jgt(tlabFull, temp1, temp2); | |
417 asm.pstore(CiKind.Word, thread, asm.i(config.threadTlabTopOffset), temp1, false); | |
418 asm.bindInline(resume); | |
419 | |
420 asm.pload(CiKind.Word, temp1, type, asm.i(config.instanceHeaderPrototypeOffset), false); | |
421 asm.pstore(CiKind.Word, result, temp1, false); | |
422 asm.pstore(CiKind.Object, result, asm.i(config.hubOffset), type, false); | |
423 | |
424 asm.bindOutOfLine(tlabFull); | |
425 XirOperand arg = asm.createRegister("runtime call argument", CiKind.Object, AMD64.rdx); | |
426 asm.mov(arg, type); | |
427 asm.callRuntime(config.newInstanceStub, result); | |
428 asm.jmp(resume); | |
429 | |
430 return asm.finishTemplate("new instance"); | |
431 } | |
432 | |
433 @Override | 433 @Override |
434 public XirSnippet genArrayLength(XirSite site, XirArgument array) { | 434 public XirSnippet genArrayLength(XirSite site, XirArgument array) { |
435 return new XirSnippet(arrayLengthTemplate, array); | 435 return new XirSnippet(arrayLengthTemplate, array); |
436 } | 436 } |
437 | 437 |