Deutsch English Français Italiano |
<vckfp6$16v40$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: BGB <cr88192@gmail.com> Newsgroups: comp.arch Subject: Re: Computer architects leaving Intel... Date: Fri, 20 Sep 2024 13:42:34 -0500 Organization: A noiseless patient Spider Lines: 258 Message-ID: <vckfp6$16v40$1@dont-email.me> References: <vaqgtl$3526$1@dont-email.me> <2024Sep10.101932@mips.complang.tuwien.ac.at> <ygn8qvztf16.fsf@y.z> <2024Sep11.123824@mips.complang.tuwien.ac.at> <vbsoro$3ol1a$1@dont-email.me> <867cbhgozo.fsf@linuxsc.com> <20240912142948.00002757@yahoo.com> <vbuu5n$9tue$1@dont-email.me> <20240915001153.000029bf@yahoo.com> <vc6jbk$5v9f$1@paganini.bofh.team> <20240915154038.0000016e@yahoo.com> <2024Sep15.194612@mips.complang.tuwien.ac.at> <vc8m5k$2nf2l$1@dont-email.me> <vc8tlj$2od19$3@dont-email.me> <vca209$319ci$1@dont-email.me> <vcbiov$3ecji$3@dont-email.me> <vccmm3$3m42h$1@dont-email.me> <e060fe2e0ee375efff2a9ab1223652f5@www.novabbs.org> <vccv3r$3nfqv$1@dont-email.me> <45fb24ca46af5c388b0a44af2f72ddf6@www.novabbs.org> <vcdjbn$3u259$1@dont-email.me> <77a593b0e8dcb7e4f38c006d3a148cdc@www.novabbs.org> <vcf491$57pi$1@dont-email.me> <7a8a967098cb2558c1bbdda5cb3ce99f@www.novabbs.org> <vciljc$q5fh$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 20 Sep 2024 20:43:51 +0200 (CEST) Injection-Info: dont-email.me; posting-host="a023699a4ef7a97393a5f9b5d1924251"; logging-data="1277056"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/OVvO2E++9Fh8tsCO3WCCn89arl7WorcM=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:4WMfUFNUAbnJyJDrJeWrrMP/uX0= Content-Language: en-US In-Reply-To: <vciljc$q5fh$1@dont-email.me> Bytes: 10938 On 9/19/2024 9:09 PM, BGB wrote: > On 9/18/2024 1:42 PM, MitchAlsup1 wrote: >> On Wed, 18 Sep 2024 17:55:34 +0000, BGB wrote: >> >>> On 9/18/2024 9:27 AM, MitchAlsup1 wrote: >>>> On Wed, 18 Sep 2024 4:00:43 +0000, BGB wrote: >>>> >>>>> On 9/17/2024 6:04 PM, MitchAlsup1 wrote: >>>> >>>>>> Still limited to 32-bit displacement from IP. >>>>>> >>>>>> How would you perform the following call:: >>>>>> current IP = 0x0000000000001234 >>>>>> target IP = 0x7FFFFFFF00001234 >>>>>> >>>>>> This is a single (2-word) instruction in my ISA, assuming GOT is >>>>>> 32-bit displaceable and 64-bit entries. >>>>>> >>>>> >>>>> Granted, but in plain RISC-V, there is no real better option. >>>>> >>>>> If one wants to generate 64-bit displacement, and doesn't want to >>>>> load a >>>>> constant from memory: >>>>> LUI X6, Disp20Hi //20 bits >>>>> ADDI X6, X6, Disp12Hi //12 bits >>>>> AUIPC X7, Disp20Lo >>>>> ADD X7, Disp12Lo >>>>> SLLI X6, X6, 32 >>>>> ADD X7, X7, X6 >>>> >>>> How very much simpler is:: >>>> >>>> MEM Rd,[IP,Ri<<s,DISP64] >>>> >>>> 1 instruction, 3 words, 1 decode cycle, no forwarding, shorter latency. >>> >>> >>> It is simpler, but N/E in RV64G... >>> >>> This is the whole issue of the idea: >>> Remain backwards compatible with RV64G / RV64GC (in a binary sense). >> >> So, you like sailing with an albatross tied around your neck:: Check. >> > > Likely for a custom CPU to be taken all that seriously at this point, > one is going to need binary compatibility with at least one semi-popular > ISA. > > And, main options at this point are: > RISC-V, which is just kinda meh; > ARMv7 / ARMv8, which are not free; > And, v7/v8 are nowhere near patents expiring. > x86-64, just no. > Doable at least as far as x86-64 and SSE2 should be in the clear. > But, making it not perform well seems harder. > > Well, or MIPS64 or SPARC64 or similar, but these are arguably worse > options than RISC-V. > > >>> *and* try to allow extending it in a way such that performance can be >>> less poor... >> >> I should remind you that if you eliminate the compressed parts of >> RISC-V you can fit the entire My 66000 ISA in the space remaining. >> All the constants, all transcendentals, all the far-control transfers, >> the efficient context switching, overhead free world switching,... >> --------- > > The idea is that the mode switching can allow swapping out the > Compressed instructions to make room for other stuff, while also leaving > the compressed instructions in existence for compatibility with binaries > built assuming them. > > And, is less drastic than gluing together two unrelated ISA's using > inter-ISA branches (say, the current situation of trying to mix RISC-V > code with XG2 via magic function pointers). > > > But, yeah, if you want to design a version of your ISA than can also co- > execute with RISC-V, not like I have any reason to complain. > > >>>>> >>>>> Which is sort of the whole reason I am considering hacking around it >>>>> with an alternate encoding scheme. >>>> >>>> Just put in real constants. >>>>> >>>>> New encoding scheme can in theory do: >>>>> LEA X7, PC, Disp64 >>>>> In a single 96-bit instruction. >>>> >>>> Where is the indexing register? >>> >>> Generally the use of a displacement and index register are mutually >>> exclusive (and, cases that can make use of Disp AND Index are much less >>> common than Disp OR Index). >> >> COMMON ?alpha/ a(100,100), b(300,300), >> >> .. >> >> x = a(i,j)*b(j,i); >> >> I see large displacements with indexing all the time from ASM out >> of Brian's compiler. >> > > I tried adding this stuff experimentally with BGBCC in the past, in both > of my ISA efforts, but seemingly my attempts didn't use them all that > often (as opposed to [Rb+Disp] and [Rb+Ri*FixSc] which are used > extensively). > > Arguably, the main relevant cases would have been for stack-arrays or > arrays inside structs. > > But, if such an array is referenced multiple times in a given basic > block, it would likely still be more efficient to load the address of > the array into a register. > > > Though, if one were to go simply on usage frequency, likely auto- > increment would be slightly ahead. > > Say (roughly from memory): > [Rb+Disp] // ~ 60% (includes PC and GBR) > [Rb+Ri*FixSc] // ~ 30% (eg: "ptr[i]") > [Rb]+ // ~ 6% (eg: "*ptr++") > [Rb+Ri*Sc+Disp] // ~ 4% (eg: "obj->arr[i]") > > Well, unless someone can find a table that shows significantly different > stats. Off hand, not easily finding such a table to compare with > (preferably from a relatively mature target which has the relevant modes). > > Can note that "*ptr++" seems most common for auto-increment, whereas > "*ptr--", "*--ptr", and "*++ptr" are rarer. > > > Seems like no one has made tables online for the relative usage > frequencies of the various x86-64 and ARM64 addressing mode... > > Might be useful to have this data for "relatively mature" architectures. > Would be a pain to write an x86-64 disassembler mostly to use it just to > stat up the ModR/M+SIB sequences. Does raise the question of if there is > a semi-reliable way to stat this without needing to write a full > disassembler. > > > One simple option would be to assume an instruction looks like: > [Prefix Bytes] > [REX byte] > OP_Byte | 0F+OP_Byte > Mod/RM + SIB + ... > > And then use a heuristic to try to guess how to interpret the > instruction stream based on "looks better" (more likely to be aligned > with the instruction stream vs random unaligned garbage). > > Though, such a "looks good" heuristic could itself risk skewing the > results. ========== REMAINDER OF ARTICLE TRUNCATED ==========