|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
Insomma la "riga 0" non si può leggere come un unico registro ad 8 bit, ma sempre e solo come R0 e R1...
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
in effetti.....sorgerebbe un problema .... in quanto operazioni tra due coppie di registri andrebbero in overflow.
bisognerebbe usare una coppia di accumulatori |
|
|
|
|
|
#23 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Per avere "già pronti" dimensione e posizione devi pertanto operare nel seguente modo: - estrarre i 4 primi bit; - usando una LUT ricavare la dimensione (valore a 3 bit, magari da 0 a 4: 0-> 8 bit, 1 -> 16 bit, ecc.) e la maschera (7 bit) da usare per estrarre la posizione; - usare gli ultimi 7 bit facendo un and logico con la maschera del precedente punto per ricavare la posizione. Questo se vogliamo risparmiare spazio, visto che le LUT costano. Per averli già pronti servirebbe una LUT da 8 bit che ritorni due dati, a 3 e 7 bit, che però è ben più costosa. Ma magari mi sto facendo delle seghe mentali per lo spazio, visto che ormai abbiamo chip da miliardi di transistor. Comunque rimane il fatto che per poter disporre dei dati che ci servono è necessario un passo in più, per estrarli. Quote:
Però potrebbe essere interessante il tuo schema per avere più registri sfruttando lo spazio a disposizione. Può darsi che aggiungendo un solo stadio nella pipeline al solo scopo di estrarre questi dati si possa ottenere comunque un vantaggio. Ma dipende strettamente dall'uso che ne farebbe un compilatore e/o un programmatore. Perché se è vero che 128 registri a 8 bit sono tantissimi e fanno venire l'acquolina in bocca, è anche vero che pensare di sfruttarli tutti è pura utopia. Quindi nella scelta della caratteristiche da implementare serve anche un po' di sano pragmatismo.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Tanto per dire, i 68000 hanno 8 registri dati indistinti: con ognuno di essi puoi fare esattamente le stesse cose. E i compilatori (e i programmatori pure, che non devono ricordarsi "eccezioni" al modello) ringraziano per l'ortogonalità.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#25 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
Quote:
D'altra parte, se vogliamo un processore moderno allora bisognerebbe metterci qualche altra corbelleria tipo la gestione OOO (e qui so' cazzi ).Più che altro mi pareva un'idea molto flessibile, tutto qui
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
|
|
|
|
|
|
#26 | |||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Wow, avete già fatto 2 pagine!
x MaxArt: è un'idea interessante, molto utile per usare ogni byte a disposizione, ma decisamente complesso per decodificare la dimensione (come ha già spiegato bene Cesare). Invece di usare campi di bit "variabili" per identificare la dimensione (1 = 64, 10 = 32, 100 = 16 ecc...), puoi usare 2 bit "fissi", che ti danno quelle 4 combinazioni (8,16,32,64) che ti servono, e usare gli altri per definire il registro vero e proprio. La differenza, in questo caso, è che avrai la stessa quantità di registri da 8, da 16 (ecc) bit, e la cosa può piacere o no. Quote:
x lupoxxx87: Quote:
Quote:
Cmq, e se avessimo tipo 16/32 registri, tutti a 64 bit, ma che posso specificare al volo la dimensione da contenere? Cioè, ad un registro posso far contenere un dato a 8, 16, 32 o 64 bit, se è a 8 il dato occuperà il byte meno significativo dei 64, se è a 16 occuperà i 2 meno significativi ecc..., e poi nell'istruzione decidiamo quanto usarne. Vantaggio: è molto più semplice da costruire (basta aggiungere una riga di AND per mascherare solo i dati che ci interessano, sia in ingresso sia in uscita dal banco registri); svantaggio: se usi dati piccoli, sprechi la parte alta dei registri (ma se ti sta a cuore lo spazio, puoi usare degli shift per caricare anche in alto, poi possiamo dire al processore di non azzerare automaticamente la parte alta del registro quando carichiamo un nuovo dato piccolo). |
|||
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Una cosa che mi sarebbe piaciuta implementare, è una serie di istruzioni che fanno il cmp e poi il salto condizionato adatto, p.es:
Codice:
cje R0, R1, etichetta ; compara e salta se uguale cjne R0, R2, etichetta ; compara e salta se non uguale ecc... Se rimane spazio si possono anche creare le istruzioni con i dati immediati Codice:
cje R0, 5, etichetta ; compara e salta se uguale cjne R0, 26, etichetta ; compara e salta se non uguale ecc... |
|
|
|
|
|
#28 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Però per i registri non va bene. Per altro, invece, è utile; infatti ne ho adottato una codifica particolare per un'istruzione simile alla IF degli ARM, per l'esecuzione condizionata di un certo numero di istruzioni. Quote:
Quote:
Quote:
), ma nell'opcode a 32 bit dovrebbe esserci abbastanza spazio (ho già messo una DBcc per eseguire loop condizionati, ma con contatore anche a 64 bit; Motorola-style anche questo ovviamente Quote:
CMP.Q $123456789ABCDEF0,D0
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
|
|
|
|
|
#29 | |||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() Quote:
![]() Quote:
|
|||
|
|
|
|
|
#30 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
Quote:
In ogni caso il comportamento è esattamente come quello di un CISC con opcode a dimensione variabile. Quote:
Io, invece, ho dedicato un apposito registro. Per due motivi: il primo è che così libero un registro indirizzi. Il secondo è che il set di registri diventa completamente general purpose (nessun registro specializzato), per cui compilatori e programmatori ringraziano. Altra cosa, in questo modo SP lo posso gestire come voglio in termini di allineamento.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Penso di aver completato la tabella degli opcode a 16 bit.
Appena ho tempo (devo sospendere perché mercoledì ho il solito appuntamento con AD
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#32 | ||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Quote:
Poi, c'è un vantaggio a usare differenti registri per i dati e per gli indirizzi? Perchè in questo caso stai dando una limitazione ai compilatori e ai programmatori: metti che devi unire 10 vettori in uno ordinato, finiscono i registri indirizzo. O è solo per risparmiare un bit nell'istruzione? Comincio a buttare giù la mia versione del set istruzioni, così possiamo discutere meglio. |
||
|
|
|
|
|
#33 | |||||
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
Quote:
Quote:
Mi ricordo anche che gli Z80 avevano registri specifici, e tu di certo puoi confermarlo o smentirlo. Beh, gli Z80 si usano ancora Non necessariamente. Quote:
Quali contesti ne gioverebbero e perché? Quote:
![]() Quote:
Ma si può vedere qualcosa? Altrimenti come faccio ad imparare?
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
|||||
|
|
|
|
|
#34 | |||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Cmq l'idea non è cattiva, per niente, ma la limitazione c'è lo stesso: se usi 8 bit per il campo registri, arriveresti al massimo a 2 registri da 512 bit, perchè poi non hai lo spazio fisico nell'istruzione per espandere il suddetto campo (sempre se vuoi mantenere la retrocompatibilità con i precedenti programmi) Quote:
Quote:
|
|||
|
|
|
|
|
#35 | ||
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
Quote:
![]() Guarda un po' che fatica che si sta facendo a passare ai 64 bit... (e non è solo una questione di x86). Quote:
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
||
|
|
|
|
|
#36 | |
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Basta solo ricompilare le applicazioni, e si avrebbe già tutto a 64 bit (beh, non si avrebbero da subito tutte le capacità, perchè bisogna anche un po' ottimizzare il sorgente, tipo sulla dimensione delle variabili). Non si passa in bomba ai 64 (almeno su x86 e Windows) perchè ci sono ancora tantissimi computer con cpu a 32bit, e perchè molti produttori sono pigri (puoi farti una distro Linux con tutti i programmi a 64 bit, semprechè non ti interessi avere Flash in Firefox |
|
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
No, non è solo questione di x86. A parte il casino che c'è stato coi G5 a "64 bit" (per poi essere in realtà solo un lontano parente di un processore a 64 bit), il problema sta anche nei sistemi operativi che non si aggiornano ma soprattutto negli interi più lunghi che ti obbligano ad avere:
- assai più RAM; - dischi più grandi e più veloci; - bus più ampi e veloci. Per molte applicazioni anche 32 bit sono troppi: prendine una, che so, che ti fa da sveglia... Un editor di testo non vedo che necessità abbia dei 64 bit (file di testo più grandi di 4 GB? ORLY?
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
|
|
|
|
|
#38 | ||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Riguardo ai bus: già dal pentium 4 abbiamo avuto bus dati a 64 bit (se non addirittura prima) Quote:
Cmq, in ultima analisi, la colpa è anche del corrente set di istruzioni, che riprende dall'x86: se avessero tagliato completamente, ridisegnato il set, e relegato l'emulazione ad un altro strato, in un futuro si sarebbe potuto togliere completamente il supporto al 32 bit e lasciare solo il sistema a 64. Invece ci tocca cmq all'avvio del sistema passare dalla modalità 32 bit, e già questo ci blocca dal poterla togliere. |
||
|
|
|
|
|
#39 | ||||||||||||||||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
Tanto vale, a questo punto, fornirgli un apposito registro, e liberare un prezioso registro per un uso più generale. Quote:
Se consideri che molti processori moderni hanno una sezione di call-stack, capisci bene che il caso comune non è certo quello di un insieme di funzioni flat che poi non richiamano nessuno. Per questo ho preferito usare il classico stack per l'indirizzo di ritorno. Ma quella del registro link è un'idea che potrebbe essere presa in considerazione. D'altra parte ho pure aggiunto un registro per il Frame Pointer (FP) e apposite istruzioni (LINK, UNLINK, PUSH FP, POP FP, MOVE FP,An, MOVE An,FP) per poterlo gestire, per cui si potrebbe fare la stessa cosa (anche se ormai nella tabella degli opcode a 16 bit sono rimasti una decina di posti Quote:
Ad esempio per aggiornare un registro indirizzi basta che l'ALU dedicata implementi le operazioni di somma, differenza, confronto, e hai finito. In questo modo l'ALU che si occupa di effettuare il calcolo dell'indirizzo si può usare indifferentemente per la sezione AGU e per l'aggiornamento di un registro indirizzi. Quote:
Quote:
Quote:
Quote:
Un esempio "sul campo" penso che valga meglio di qualunque spiegazione. Quote:
Diciamo che l'aperto di questo thread mi ha dato la possibilità di riversare su un progetto concreto tutte le masturb, ehm, le idee che mi sono fatto in questo tempo. Quote:
Considera che al momento mi sono concentrato quasi esclusivamente sul funzionamento dello user mode. Per il supervisor mode ho già un po' di idee (mi piace molto il modello ARM), ma ci penserò dopo. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Comunque ad AMD rimprovero un'altra cosa: AMD64 non è compatibile a livello binario con x86, per cui sei costretto a ricompilare i sorgenti e ad adattarli (poco, per fortuna). Tanto valeva sistemare l'ISA a 64 bit razionalizzando la tabella degli opcode (tanto per cambiare, avrei utilizzato una opcode table a 16 bit
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||||||||||||||
|
|
|
|
|
#40 | ||||||
|
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Quote:
Quote:
mov r, [++SP] mov [SP--],r mov r, [PC++] mov PC, [SP--] mov PC, [PC++] Si semplificherebbe il tutto, mantenendo ortogonalità e lasciando al programmatore possibilità di abbinare le istruzioni per far venire fuori qualche altro "trucchetto". Quote:
Codice:
add R1, [R2+R3] Codice:
add R1, [R2++] Quote:
Quote:
Cmq concordo che ridisegnare la tabella di opcode sarebbe stato decisamente meglio. Ultima cosa: come pensi di far riconoscere al processore istruzioni a 16 o a 32 bit? Queste ultime sono solo normali 32 bit ma con un prefisso, o usi un bit dell'istruzione per dire "questa è a 32, carica anche l'altra word" ? |
||||||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:50.










HWU Rugby Group

).











