?login_element?

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download

  1. //// ьр°шээючртшёшь√х тхЄъш
  2.  
  3.       case _TOKCOMMA: {/**_oldreg = _reg;*//**эх ЄЁюурхь value! хую ёфтшэхЄ Єюы№ъю фЁєуюх value!*/ goto loop;}
  4.       case _TOKOPENBRACE:
  5.       case _TOKCLOSEBRACE:
  6.  
  7.         {goto loop;}
  8.  
  9.       case _ASMNOP: {_base=0xbf; _base2=0x00; goto loop;}
  10. //х∙╕ эр 0xbf уЁєяяр IT...
  11.  
  12. //      case _ASMADR: //???
  13.  
  14.       case _ASMADCS:{_base=0x41; _base2=0x40; goto loop;}
  15.       case _ASMADDS:{_base=0x18; _base2=0x00; _baseN=0x30; goto loop;} //baseN adds r0,#N
  16. //      case _ASMADD: {_basepc=0xa0; _basesp=0xa8; _baseisp=0xb0; goto loop;} //basepc add r0,pc,#N*4 TODO //basesp add r0,sp,#N*4 TODO //baseisp add sp,SN7*4 (S - юЄфхы№э√щ чэръ схч фюяюыэхэш  фю 2) TODO
  17. //cbz r0,#N*2 %1011 00N1 NNNN Nrrr
  18. //cbnz r0,#N*2 %1011 10N1 NNNN Nrrr
  19.       case _ASMSBCS:{_base=0x41; _base2=0x80; goto loop;}
  20.       case _ASMSUBS:{_base=0x1a; _base2=0x00; _baseN=0x38; goto loop;} //baseN subs r0,#N
  21.       case _ASMRSBS:{_base=0x42; _base2=0x40; goto loop;}
  22.       case _ASMCMN: {_base=0x42; _base2=0xc0; goto loop;}
  23.       case _ASMCMP: {_base=0x42; _base2=0x80; _baseN=0x28; goto loop;} //baseN cmp r0,#N
  24.       case _ASMTST: {_base=0x42; _base2=0x00; goto loop;}
  25. //      case _ASMNEG:
  26.       case _ASMMULS:{_base=0x43; _base2=0x40; goto loop;}
  27.       case _ASMBICS:{_base=0x43; _base2=0x80; goto loop;}
  28.  
  29.       case _ASMANDS:{_base=0x40; _base2=0x00; goto loop;}
  30.       case _ASMORRS:{_base=0x43; _base2=0x00; goto loop;}
  31.       case _ASMEORS:{_base=0x40; _base2=0x40; goto loop;}
  32.  
  33.       case _ASMASRS:{_base=0x41; _base2=0x00; _baseN=0x10; goto loop;}
  34.       case _ASMLSLS:{_base=0x40; _base2=0x80; _baseN=0x00; goto loop;} //baseN lsls r0,r1,#N
  35.       case _ASMLSRS:{_base=0x40; _base2=0xc0; _baseN=0x08; goto loop;}
  36.       case _ASMRORS:{_base=0x41; _base2=0xc0; goto loop;}
  37.  
  38.       case _ASMB:   {_base=0xe0; goto loop;} //%1110 0Snn nnnn nnnn (S ё фюяюыэхэшхь фю 2)
  39. //e8 эх шёяюы№чєхЄё 
  40. //e9 эх шёяюы№чєхЄё 
  41. //ea эх шёяюы№чєхЄё 
  42. //eb эх шёяюы№чєхЄё 
  43. //ec эх шёяюы№чєхЄё 
  44. //ed эх шёяюы№чєхЄё 
  45. //ee эх шёяюы№чєхЄё 
  46. //ef эх шёяюы№чєхЄё 
  47.       case _ASMBEQ: {_base=0xd0; goto loop;}
  48.       case _ASMBNE: {_base=0xd1; goto loop;}
  49.       case _ASMBCS: {_base=0xd2; goto loop;} //HS
  50.       case _ASMBCC: {_base=0xd3; goto loop;} //LO
  51.       case _ASMBMI: {_base=0xd4; goto loop;}
  52.       case _ASMBPL: {_base=0xd5; goto loop;}
  53.       case _ASMBVS: {_base=0xd6; goto loop;}
  54.       case _ASMBVC: {_base=0xd7; goto loop;}
  55.       case _ASMBHI: {_base=0xd8; goto loop;}
  56.       case _ASMBLS: {_base=0xd9; goto loop;}
  57.       case _ASMBGE: {_base=0xda; goto loop;}
  58.       case _ASMBLT: {_base=0xdb; goto loop;}
  59.       case _ASMBGT: {_base=0xdc; goto loop;}
  60.       case _ASMBLE: {_base=0xdd; goto loop;}
  61. //de эх шёяюы№чєхЄё 
  62. //      case _ASMBAL:
  63.       case _ASMBL:  {_base=0xf0; goto loop;} //xx f0+ xx f8+ //фышээ√щ яхЁхїюф (-400000..+400000)
  64. //%1111 0sHH HHHH HHHH
  65. //%1111 1LLL LLLL LLLL
  66. //HL фюьэюцрхЄё  фю 2 ш яЁшсрты хЄё  ъ PC яюёых ъюэЎр ъюьрэф√, Є.х. PC+4 (схч юъЁєуыхэш  фю 4)
  67.       case _ASMBLX: {_base=0x47; _base2=0x80; goto loop;}
  68.       case _ASMBX:  {_base=0x47; _base2=0x00; goto loop;}
  69.  
  70.       case _ASMBKPT:{_base=0xbe; goto loop;}
  71.  
  72. //      case _ASMDMB: //???
  73. //      case _ASMDSB: //???
  74. //      case _ASMISB: //???
  75. //      case _ASMCPSID: //эхЄ т Phyton
  76. //      case _ASMCPSIE: //юяхЁрэф√?
  77. //      case _ASMSEV:
  78.       case _ASMSVC: {_base=0xdf; goto loop;} //svc #N
  79. //      case _ASMYIELD:
  80.  
  81.       case _ASMLDR: {_base=0x68; _base2=0x00; _baseN=0x48; /**_base3=0x50; _basesp=0x98;*/ goto loop;} //baseN ldr r0,[pc,#n] //base3 ldr r0,[r1,r2] TODO //basesp ldr r0,[sp,#N*4] TODO
  82.       case _ASMLDRB:{_base=0x78; _base2=0x00; goto loop;}
  83.       case _ASMLDRH:{_base=0x88; _base2=0x00; goto loop;}
  84. //      case _ASMLDRSB:
  85. //      case _ASMLDRSH:
  86. //      case _ASMLDM: //???
  87. //      case _ASMLDMFD: //???
  88.       case _ASMLDMIA:{_base=0xcf; goto loop;} //ldmia r0!,{reglist}
  89.       case _ASMSTR: {_base=0x60; _base2=0x00; /**_base3=0x50; _basesp=0x90;*/ goto loop;} //base3 str r0,[r1,r2] TODO //basesp str r0,[sp,#N*4] TODO
  90.       case _ASMSTRB:{_base=0x70; _base2=0x00; goto loop;}
  91.       case _ASMSTRH:{_base=0x80; _base2=0x00; goto loop;}
  92. //      case _ASMSTM: //???
  93. //      case _ASMSTMEA: //???
  94.       case _ASMSTMIA:{_base=0xc7; goto loop;} //stmia r0!,{reglist}
  95.  
  96.       case _ASMMOV: {_base=0x46; goto loop;}
  97.       case _ASMMOVS:{_base=0x00; _base2=0x00; _baseN=0x20; goto loop;} //baseN movs r0,#n
  98.       case _ASMMVNS:{_base=0x43; _base2=0xc0; goto loop;}
  99. //      case _ASMMRS:
  100. //      case _ASMMSR:
  101. //      case _ASMCPY: //???
  102.  
  103.       case _ASMPOP: {_base=0xbc; _reglist=0; goto loop;}
  104. //т POP ьюцэю єърчрЄ№ ёяшёюъ ЁхушёЄЁют (Єюы№ъю R0..R7 ш PC):
  105. //POP {R0,R2,R7,PC}
  106. //%1011 110P 7654 3210
  107.       case _ASMPUSH:{_base=0xb4; _reglist=0; goto loop;}
  108. //т PUSH ьюцэю єърчрЄ№ ёяшёюъ ЁхушёЄЁют (Єюы№ъю R0..R7 ш LR):
  109. //PUSH {R0,R2,R7,LR}
  110. //%1011 010L 7654 3210
  111.  
  112.       case _ASMREV:  {_base=0xba; _base2=0x00; goto loop;}
  113.       case _ASMREV16:{_base=0xba; _base2=0x40; goto loop;}
  114.       case _ASMREVSH:{_base=0xba; _base2=0xc0; goto loop;}
  115. //80 ba эх шёяюы№чєхЄё 
  116.       case _ASMSXTH: {_base=0xb2; _base2=0x00; goto loop;}
  117.       case _ASMSXTB: {_base=0xb2; _base2=0x40; goto loop;}
  118.       case _ASMUXTH: {_base=0xb2; _base2=0x80; goto loop;}
  119.       case _ASMUXTB: {_base=0xb2; _base2=0xc0; goto loop;}
  120.  
  121.         {goto loop;}
  122. //b6 эх шёяюы№чєхЄё 
  123.  
  124.    //ЇюЁьрЄ√:
  125. //comma==keepreg: ёЄртшЄё  яхЁхф тЄюЁ√ь ЁхушёЄЁюь/rp т ъюьрэфх (ьюцэю ё¤ъюэюьшЄ№, хёыш reg їЁрэшЄё  т юфэюь ьхёЄх, р rp т фЁєуюь, эю фы  add rp,rp эрфю фтр rp)
  126.  
  127.       case _FMTXX:        {asmbyte(_base2); asmbyte(_base); goto loop;}
  128.       case _FMTR:         {asmbyte(_base2+(_reg<<0x03)); asmbyte(_base); goto loop;} //bx r
  129.       case _FMTR0N:       {IF (_reg>=0x08) errwrongreg(); asmbytepopvalue(); asmbyte(_baseN+_reg); goto loop;} //adds r0,#N (baseN!!!)
  130.       case _FMTR0R0:      {err_onlylowregs(); asmbyte(_base2+(_reg<<0x03)+_oldreg); asmbyte(_base); goto loop;} //alucmd r0,r1
  131.       case _FMTR0R0SAME:  {err_onlylowregs(); asmbyte((_reg<<0x06)+(_oldreg<<0x03)+_oldreg); asmbyte(_base+(_reg>>0x02)); goto loop;} //adds r0,r1 = adds r0,r0,r1
  132.       case _FMTR8R8:      {err_onlylowregs_forbidden(); asmbyte(((_oldreg&0x08)<<0x04)+(_reg<<0x03)+(_oldreg&0x07)); asmbyte(_base); goto loop;} //mov
  133.       case _FMTR0R0NX4:   {err_onlylowregs(); i = asmpopvalue()>>2; asmbyte((BYTE)(i<<6)+(_reg<<0x03)+_oldreg); asmbyte(_base + (BYTE)(i>>2)); goto loop;}
  134.       case _FMTR0R0R0:    {IF ((_reg>=0x08) || (_oldreg>=0x08) || (_veryoldreg>=0x08)) errwrongreg(); asmbyte((_veryoldreg<<0x06)+(_reg<<0x03)+_oldreg); asmbyte(_base+(_veryoldreg>>0x02)); goto loop;}
  135.       case _FMTR0R0N7:    {err_onlylowregs(); i = asmpopvalue(); asmbyte((BYTE)(i<<6)+(_reg<<0x03)+_oldreg); asmbyte(_base + (BYTE)(i>>2)); goto loop;} //alu
  136.       case _FMTR0R0N31:   {err_onlylowregs(); i = asmpopvalue(); asmbyte((BYTE)(i<<6)+(_reg<<0x03)+_oldreg); asmbyte(_baseN + (BYTE)(i>>2)); goto loop;} //shifts
  137.       case _FMTR0R0ZERO:  {err_onlylowregs(); i = asmpopvalue(); asmbyte(_base2+(_reg<<0x03)+_oldreg); asmbyte(_base); goto loop;} //rsbs r0,r1,#0
  138.       case _FMTRADDR:     {IF (_reg>=0x08) errwrongreg(); asmdispconst((UINT)asmpopvalue()-(((_curaddr+_curshift-_BIAS/**bias (thumb)*/)+4)&0xfffffffc)); asmbyte(_baseN+_reg); goto loop;}
  139.       case _FMTBSHORTADDR:{asmdispbshort((INT)((UINT)asmpopvalue()-((_curaddr+_curshift-_BIAS/**bias (thumb)*/)+4))); goto loop;}
  140.       case _FMTBADDR:     {asmdispb((INT)((UINT)asmpopvalue()-((_curaddr+_curshift-_BIAS/**bias (thumb)*/)+4))); goto loop;}
  141.       case _FMTBLONGADDR: {asmdispbl((INT)(asmpopvalue()-(LONG)((_curaddr+_curshift-_BIAS/**bias (thumb)*/)+4))); goto loop;}
  142.       case _FMTPUSHPOP:   {
  143.         IF ((_reglist&0x3f00)!=0) errwrongreg();
  144.         asmbyte((BYTE)_reglist);
  145.         IF (_reglist>=0x4000) {
  146.           IF ( ((_reglist&0x8000)!=0) && (_base==0xb4) ) errwrongreg(); //no push {pc}
  147.           IF ( ((_reglist&0x4000)!=0) && (_base==0xbc) ) errwrongreg(); //no pop {lr}
  148.           asmbyte(_base+0x01);
  149.         }ELSE asmbyte(_base);
  150.       }
  151.  
  152.       case _RG_R0:
  153.       case _RG_R1:
  154.       case _RG_R2:
  155.       case _RG_R3:
  156.       case _RG_R4:
  157.       case _RG_R5:
  158.       case _RG_R6:
  159.       case _RG_R7:
  160.       case _RG_R8:
  161.       case _RG_R9:
  162.       case _RG_R10:
  163.       case _RG_R11:
  164.       case _RG_R12:
  165.       case _RG_SP:
  166.       case _RG_LR:
  167.       case _RG_PC:
  168. //      case _RG_RPBYNAME:
  169.  
  170.         {
  171.         _veryoldreg = _oldreg;
  172.         _oldreg = _reg;
  173.         _reg = _token-_RG_R0;
  174.         _reglist = _reglist | (1<<(UINT)_reg);
  175.         goto loop;
  176.         }
  177.  
  178.