void instructions_tests() { /* 32 bit copy */ setl(42, eax); assert(*(int32_t *)eax == 42); setl(1000000, eax); assert(*(int32_t *)eax == 1000000); movl(eax, edx); assert(*(int32_t *)edx == 1000000); /* addition */ setl(3, eax); setl(5, edx); addl(edx, eax); assert(*(int32_t *)eax == 8); /* division */ setl(15, eax); setl(5, edx); divl(edx, eax); assert(*(int32_t *)eax == 3); /* multiplication */ setl(3, eax); setl(5, edx); mull(edx, eax); assert(*(int32_t *)eax == 15); /* subtraction */ setl(3, eax); setl(5, edx); subl(edx, eax); assert(*(int32_t *)eax == -2); }
void stack_tests() { stack_init(); //printf("%p, %p\n", ebp, esp); enter(16); //printf("%p, %p\n", ebp, esp); setl(24, ebp+0); setl(18, ebp+4); /* simulate another function call */ enter(16); //printf("%p, %p\n", ebp, esp); setl(5, ebp+0); setl(3, ebp+4); movl(ebp+4, eax); addl(ebp+0, eax); leave(); //printf("%p, %p\n", ebp, esp); assert(*(int32_t *)eax == 8); /* end inner function */ movl(ebp+4, eax); addl(ebp+0, eax); leave(); //printf("%p, %p\n", ebp, esp); stack_end(); assert(*(int32_t *)eax == 42); }
int main() { int n; while(scanf("%d",&n),n) { memset(map,' ',sizeof(map)); len=4*n+2; h=4*n-2; init(); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { scanf("%d",&str[i][j]); if(str[i][j]==1) { setl(1+4*i,3+4*j); } else if(str[i][j]==-1) { setv(1+4*i,3+4*j); } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(str[i][j]==0) { set(1+4*i,3+4*j); } } print(); } return 0; }
void Rotator::reset(float angle, float velocity, float limit, float current, float stop) { _rCurrent = angle; _velocity_current = velocity; setl(limit, current, stop); _state = RS_STOPPED; }
int TMOGUIToneSlider::Create(TMOGUIAdjustValues* pVals) { pValues = pVals; pBackBuffer = new QPixmap(1,20); setl(); // std::cout << "TMOGUIToneSlider::Create " << iWhite << std::endl; return 0; }
/* stack */ void enter(const int32_t n) { if ((esp - &ss[0]) + 4 + n >= scap) { fprintf(stderr, "Stack overflow!\n"); exit(EXIT_FAILURE); } setl(ebp-&ss[0], esp); esp += 4; ebp = esp; esp += n; }
void TMOGUIToneSlider::setlog() { bLog = true; switch (iMode) { case 0: setl(); break; case 1: setr(); break; case 2: setg(); break; case 3: setb(); break; } update(); }
TMOGUIAdjust::TMOGUIAdjust(QWidget* parent, const char * name): QFrame(parent, name) { iMode = 0; pValues = 0; bLog = true; bUpdate = false; setFrameStyle( QFrame::Panel | QFrame::Sunken ); QGridLayout *pLayout = new QGridLayout(this, 8, 4); pLayout->setColStretch(0,0); pLayout->setColStretch(1,1); pLayout->setColStretch(2,0); pLayout->setColStretch(3,0); pLayout->addColSpacing(2,20); QSlider *pSlider = new QSlider(this, "HistoSlider"); pSlider->setFixedSize(16,64); pSlider->setRange(-50, 50); pSlider->setValue(0); pSlider->setOrientation(Vertical); pSlider->setTickmarks(QSlider::Right); pSlider->setTickInterval(10); pLayout->addMultiCellWidget(pSlider, 0, 3, 0, 0); pHisto = new TMOGUIHisto(this, "Histogram"); pLayout->addMultiCellWidget(pHisto, 0, 3, 1, 1, AlignBottom); pLayout->addRowSpacing(4, 2); pToneSlider = new TMOGUIToneSlider(this, "ToneSlider"); pLayout->addWidget(pToneSlider, 5, 1); pRed = new QPushButton(this, "RedButton"); pRed->setFlat(true); pRed->setFixedSize(16,16); pRed->setPixmap(*TMOResource::pResource->IconRed->pixmap()); QToolTip::add(pRed, "Select Red Channel"); pLayout->addWidget(pRed, 0, 2, AlignCenter); pGreen = new QPushButton(this, "GreenButton"); pGreen->setFlat(true); pGreen->setFixedSize(16,16); pGreen->setPixmap(*TMOResource::pResource->IconGreen->pixmap()); QToolTip::add(pGreen, "Select Green Channel"); pLayout->addWidget(pGreen, 1, 2, AlignCenter); pBlue = new QPushButton(this, "BlueButton"); pBlue->setFlat(true); pBlue->setFixedSize(16,16); pBlue->setPixmap(*TMOResource::pResource->IconBlue->pixmap()); QToolTip::add(pBlue, "Select Blue Channel"); pLayout->addWidget(pBlue, 2, 2, AlignCenter); pLum = new QPushButton(this, "LumButton"); pLum->setFlat(true); pLum->setFixedSize(16,16); pLum->setPixmap(*TMOResource::pResource->IconLumDown->pixmap()); QToolTip::add(pLum, "Select Luminance"); pLayout->addWidget(pLum, 3, 2, AlignCenter); pLinear = new QPushButton(this, "LinearButton"); pLinear->setFlat(true); pLinear->setFixedSize(32,32); pLinear->setPixmap(*TMOResource::pResource->IconLin->pixmap()); QToolTip::add(pLinear, "View In Linear Distribution"); pLayout->addMultiCellWidget(pLinear, 0, 1, 3, 3, AlignCenter); pLog = new QPushButton(this, "LogarithmicButton"); pLog->setFlat(true); pLog->setFixedSize(32,32); pLog->setPixmap(*TMOResource::pResource->IconLogDown->pixmap()); QToolTip::add(pLog, "View In Logarithmic Distribution"); pLayout->addMultiCellWidget(pLog, 2, 3, 3, 3, AlignCenter); pLayout->addRowSpacing(6, 2); QHBoxLayout* hbox = new QHBoxLayout(); QLabel* pLabel = new QLabel(this, "BlackLabel"); pLabel->setPixmap(*TMOResource::pResource->IconBlack->pixmap()); pLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); hbox->addWidget(pLabel); pBlack = new QLineEdit(this, "EditBlack"); pBlack->setAlignment(Qt::AlignRight); pBlack->setFixedWidth(72); hbox->addWidget(pBlack); hbox->insertStretch(-1,1); pLabel = new QLabel(this, "GammaLabel"); pLabel->setPixmap(*TMOResource::pResource->IconGamma->pixmap()); pLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); hbox->addWidget(pLabel); pGamma = new QLineEdit(this, "EditGamma"); pGamma->setAlignment(Qt::AlignRight); pGamma->setFixedWidth(72); hbox->addWidget(pGamma); hbox->insertStretch(-1,1); pLabel = new QLabel(this, "WhiteLabel"); pLabel->setPixmap(*TMOResource::pResource->IconWhite->pixmap()); pLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); hbox->addWidget(pLabel); pWhite = new QLineEdit(this, "EditWhite"); pWhite->setAlignment(Qt::AlignRight); pWhite->setFixedWidth(72); hbox->addWidget(pWhite); pLayout->addLayout(hbox, 7, 1); connect (pSlider, SIGNAL(sliderMoved(int)), this, SLOT(scalechanged(int))); connect (pLinear, SIGNAL(clicked()), pHisto, SLOT(setlinear())); connect (pLog, SIGNAL(clicked()), pHisto, SLOT(setlog())); connect (pRed, SIGNAL(clicked()), pHisto, SLOT(setr())); connect (pGreen, SIGNAL(clicked()), pHisto, SLOT(setg())); connect (pBlue, SIGNAL(clicked()), pHisto, SLOT(setb())); connect (pLum, SIGNAL(clicked()), pHisto, SLOT(setl())); connect (pLinear, SIGNAL(clicked()), pToneSlider, SLOT(setlinear())); connect (pLog, SIGNAL(clicked()), pToneSlider, SLOT(setlog())); connect (pRed, SIGNAL(clicked()), pToneSlider, SLOT(setr())); connect (pGreen, SIGNAL(clicked()), pToneSlider, SLOT(setg())); connect (pBlue, SIGNAL(clicked()), pToneSlider, SLOT(setb())); connect (pLum, SIGNAL(clicked()), pToneSlider, SLOT(setl())); connect (pRed, SIGNAL(clicked()), this, SLOT(setr())); connect (pGreen, SIGNAL(clicked()), this, SLOT(setg())); connect (pBlue, SIGNAL(clicked()), this, SLOT(setb())); connect (pLum, SIGNAL(clicked()), this, SLOT(setl())); connect (pBlack, SIGNAL(textChanged(const QString &)), this, SLOT(setblack(const QString &))); connect (pWhite, SIGNAL(textChanged(const QString &)), this, SLOT(setwhite(const QString &))); connect (pGamma, SIGNAL(textChanged(const QString &)), this, SLOT(setgamma(const QString &))); connect (pBlack, SIGNAL(returnPressed()), this, SLOT(updateall())); connect (pWhite, SIGNAL(returnPressed()), this, SLOT(updateall())); connect (pGamma, SIGNAL(returnPressed()), this, SLOT(updateall())); connect (pLinear, SIGNAL(clicked()), this, SLOT(setlinear())); connect (pLog, SIGNAL(clicked()), this, SLOT(setlog())); }
int encode_op(char *opcode, char *op_data) { int rd,rs,rt,imm,funct,shaft,target; char tmp[256]; const char *fi = "%s %d"; const char *fg = "%s %%g%d"; const char *ff = "%s %%f%d"; const char *fl = "%s %s"; const char *fgi = "%s %%g%d, %d"; const char *fgl = "%s %%g%d, %s"; const char *fgg = "%s %%g%d, %%g%d"; const char *fggl = "%s %%g%d, %%g%d, %s"; const char *fggi = "%s %%g%d, %%g%d, %d"; const char *fggg = "%s %%g%d, %%g%d, %%g%d"; const char *fff = "%s %%f%d, %%f%d"; const char *fgf = "%s %%g%d, %%f%d"; const char *ffg = "%s %%f%d, %%g%d"; const char *fffl = "%s %%f%d, %%f%d, %s"; const char *ffff = "%s %%f%d, %%f%d, %%f%d"; const char *ffgi = "%s %%f%d, %%g%d, %d"; const char *ffgg = "%s %%f%d, %%g%d, %%g%d"; char lname[256]; shaft = funct = target = 0; if(strcmp(opcode, "mvhi") == 0){ if(sscanf(op_data, fgi, tmp, &rs, &imm) == 3) return mvhi(rs,0,imm); } if(strcmp(opcode, "mvlo") == 0){ if(sscanf(op_data, fgi, tmp, &rs, &imm) == 3) return mvlo(rs,0,imm); } if(strcmp(opcode, "add") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return add(rs,rt,rd,0); } if(strcmp(opcode, "nor") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return nor(rs,rt,rd,0); } if(strcmp(opcode, "sub") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return sub(rs,rt,rd,0); } if(strcmp(opcode, "mul") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return mul(rs,rt,rd,0); } if(strcmp(opcode, "addi") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return addi(rs,rt,imm); } if(strcmp(opcode, "subi") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return subi(rs,rt,imm); } if(strcmp(opcode, "muli") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return muli(rs,rt,imm); } if(strcmp(opcode, "input") == 0){ if(sscanf(op_data, fg, tmp, &rd) == 2) return input(0,0,rd,0); } if(strcmp(opcode, "inputw") == 0){ if(sscanf(op_data, fg, tmp, &rd) == 2) return inputw(0,0,rd,0); } if(strcmp(opcode, "inputf") == 0){ if(sscanf(op_data, ff, tmp, &rd) == 2) return inputf(0,0,rd,0); } if(strcmp(opcode, "output") == 0){ if(sscanf(op_data, fg, tmp, &rs) == 2) return output(rs,0,0,0); } if(strcmp(opcode, "outputw") == 0){ if(sscanf(op_data, fg, tmp, &rs) == 2) return outputw(rs,0,0,0); } if(strcmp(opcode, "outputf") == 0){ if(sscanf(op_data, ff, tmp, &rs) == 2) return outputf(rs,0,0,0); } if(strcmp(opcode, "and") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return _and(rs,rt,rd,0); } if(strcmp(opcode, "or") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return _or(rs,rt,rd,0); } if(strcmp(opcode, "sll") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return sll(rs,rt,rd,0); } if(strcmp(opcode, "srl") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return srl(rs,rt,rd,0); } if(strcmp(opcode, "slli") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return slli(rs,rt,imm); } if(strcmp(opcode, "srli") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return srli(rs,rt,imm); } if(strcmp(opcode, "b") == 0){ if(sscanf(op_data, fg, tmp, &rs) == 2) return b(rs,0,0,0); } if(strcmp(opcode, "jmp") == 0){ if(sscanf(op_data, fl, tmp, lname) == 2) { strcpy(label_name[label_cnt],lname); return jmp(label_cnt++); } } if(strcmp(opcode, "jeq") == 0){ if(sscanf(op_data, fggl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return jeq(rs,rt,label_cnt++); } } if(strcmp(opcode, "jne") == 0){ if(sscanf(op_data, fggl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return jne(rs,rt,label_cnt++); } } if(strcmp(opcode, "jlt") == 0){ if(sscanf(op_data, fggl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return jlt(rs,rt,label_cnt++); } } if(strcmp(opcode, "jle") == 0){ if(sscanf(op_data, fggl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return jle(rs,rt,label_cnt++); } } if(strcmp(opcode, "call") == 0){ if(sscanf(op_data, fl, tmp, lname) == 2) { strcpy(label_name[label_cnt],lname); return call(label_cnt++); } } if(strcmp(opcode, "callR") == 0){ if(sscanf(op_data, fg, tmp, &rs) == 2) return callr(rs,0,0,0); } if(strcmp(opcode, "return") == 0){ return _return(0); } if(strcmp(opcode, "ld") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return ld(rs,rt,rd,0); } if(strcmp(opcode, "ldi") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return ldi(rs,rt,imm); } if(strcmp(opcode, "ldlr") == 0){ if(sscanf(op_data, fgi, tmp, &rs, &imm) == 3) return ldlr(rs,0,imm); } if(strcmp(opcode, "fld") == 0){ if(sscanf(op_data, ffgg, tmp, &rd, &rs,&rt) == 4) return fld(rs,rt,rd,0); } if(strcmp(opcode, "st") == 0){ if(sscanf(op_data, fggg, tmp, &rd, &rs,&rt) == 4) return st(rs,rt,rd,0); } if(strcmp(opcode, "sti") == 0){ if(sscanf(op_data, fggi, tmp, &rt, &rs, &imm) == 4) return sti(rs,rt,imm); } if(strcmp(opcode, "stlr") == 0){ if(sscanf(op_data, fgi, tmp, &rs, &imm) == 3) return stlr(rs,0,imm); } if(strcmp(opcode, "fst") == 0){ if(sscanf(op_data, ffgg, tmp, &rd, &rs,&rt) == 4) return fst(rs,rt,rd,0); } if(strcmp(opcode, "fadd") == 0){ if(sscanf(op_data, ffff, tmp, &rd, &rs, &rt) == 4) return fadd(rs,rt,rd,0); } if(strcmp(opcode, "fsub") == 0){ if(sscanf(op_data, ffff, tmp, &rd, &rs, &rt) == 4) return fsub(rs,rt,rd,0); } if(strcmp(opcode, "fmul") == 0){ if(sscanf(op_data, ffff, tmp, &rd, &rs, &rt) == 4) return fmul(rs,rt,rd,0); } if(strcmp(opcode, "fdiv") == 0){ if(sscanf(op_data, ffff, tmp, &rd, &rs, &rt) == 4) return fdiv(rs,rt,rd,0); } if(strcmp(opcode, "fsqrt") == 0){ if(sscanf(op_data, fff, tmp, &rd, &rs) == 3) return fsqrt(rs,0,rd,0); } if(strcmp(opcode, "fabs") == 0){ if(sscanf(op_data, fff, tmp, &rd, &rs) == 3) return _fabs(rs,0,rd,0); } if(strcmp(opcode, "fmov") == 0){ if(sscanf(op_data, fff, tmp, &rd, &rs) == 3) return fmov(rs,0,rd,0); } if(strcmp(opcode, "fneg") == 0){ if(sscanf(op_data, fff, tmp, &rd, &rs) == 3) return fneg(rs,0,rd,0); } if(strcmp(opcode, "fldi") == 0){ if(sscanf(op_data, ffgi, tmp, &rt, &rs, &imm) == 4) return fldi(rs,rt,imm); } if(strcmp(opcode, "fsti") == 0){ if(sscanf(op_data, ffgi, tmp, &rt, &rs, &imm) == 4) return fsti(rs,rt,imm); } if(strcmp(opcode, "fjeq") == 0){ if(sscanf(op_data, fffl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return fjeq(rs,rt,label_cnt++); } } if(strcmp(opcode, "fjlt") == 0){ if(sscanf(op_data, fffl, tmp, &rs, &rt, lname) == 4) { strcpy(label_name[label_cnt],lname); return fjlt(rs,rt,label_cnt++); } } if(strcmp(opcode, "halt") == 0){ return halt(0,0,0,0); } if(strcmp(opcode, "setL") == 0){ if(sscanf(op_data, fgl, tmp, &rd, lname) == 3) { strcpy(label_name[label_cnt],lname); return setl(0,rd,label_cnt++); } } if(strcmp(opcode, "padd") == 0){ if(sscanf(op_data, fgi, tmp, &rt, &imm) == 3) { return padd(0,rt,imm); } } if(strcmp(opcode, "link") == 0){ if(sscanf(op_data, fi, tmp, &imm) == 2) { return link(0,0,imm); } } if(strcmp(opcode, "movlr") == 0){ return movlr(0,0,0,0); } if(strcmp(opcode, "btmplr") == 0){ return btmplr(0,0,0,0); } /* if(strcmp(opcode, "padd") == 0){ if(sscanf(op_data, fgg, tmp, &rd, &rt) == 3) { return padd(0,rt,d,0); } } */ return -1; }