Closed
Bug 602793
Opened 15 years ago
Closed 12 years ago
nanojit: in NativeX64.cpp, generate d[b + i<<s] addressing modes in asm_{load,store}{32,64}()
Categories
(Core Graveyard :: Nanojit, defect)
Tracking
(Not tracked)
RESOLVED
WONTFIX
People
(Reporter: n.nethercote, Unassigned)
Details
Attachments
(1 file)
|
12.33 KB,
patch
|
Details | Diff | Splinter Review |
This will help Kraken in particular.
| Reporter | ||
Comment 1•15 years ago
|
||
Here's a not-even-close-to-working patch.
Personally, I find the LuaJIT-style encoding style used in the X64 back-end incomprehensible. It may be clever and avoid lots of conditional branches, but in my experience native codegen perf doesn't show up on profiles, so this is premature optimization. Furthermore, this encoding style smears the details of instruction encoding (which on X64 are horribly complicated) all over the entire backend -- you need to completely understand the encoding if you add any new instruction, even minor variations of existing instructions. In comparison, when I added the complex amodes to the i386 backend it was easy because I was able to reuse the encoding layers.
I think the best way forward is to convert the X64 backend to use a style more like the i386 backend.
Here are some notes from Ed:
X64_movlrm = 0x 00000000 80 8B 40 07 // 32-bit load r <- [b+d32]
X64_movqrm = 0x 00000000 80 8B 48 07 // 64-bit load r <- [b+d32]
// NEW 64-bit-load guy with sib, but no room for d32:
SIB = scale << 6 | x << 3 | b
MOD = 0x04 (will choose 0, d8, or d32 mode from displ)
SIB MOD REX LEN
X64_movl_sib = 0x 00 04 8B 40 00 00 00 04 // 32-bit load r <- [b+x*scale]
X64_movq_sib = 0x 00 04 8B 48 00 00 00 04 // 64-bit load r <- [b+x*scale]
opcode = X64_movq_sib | scale << (6+56)
if (isS8(disp)) {
// use disp8 mode
opcode |= 1LL << (6+48); // set upper 2 MOD bits in byte 7 to 0b01
*(--_nIns) = int8_t(disp);
emitxrb(opcode, r, x, b);
} else {
// use disp32 mode
opcode |= 2LL << (6+48); // set upper 2 MOD bits in byte 7 to 0b10
*(--_nIns) = int8_t(disp);
emitxrb_imm(opcode, r, x, b, disp);
}
| Reporter | ||
Updated•14 years ago
|
Assignee: nnethercote → nobody
Status: ASSIGNED → NEW
| Assignee | ||
Updated•12 years ago
|
Product: Core → Core Graveyard
| Reporter | ||
Comment 2•12 years ago
|
||
Nanojit has been dead for several years. Its Bugzilla component has been moved to the graveyard (bug 984276).
I checked all the open bugs. They're all uninteresting, so I'm WONTFIXing them all. Apologies for the bugspam.
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → WONTFIX
You need to log in
before you can comment on or make changes to this bug.
Description
•