亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? divc.c

?? 一些ARM的源程序
?? C
字號:
/*  Optimal divide-by-contstant code generator
    Advanced RISC Machines
*/


#include <stdio.h>
#include <stdlib.h>

#define BANNER          "generated by divc 1.02 (Advanced RISC Machines)"
#define DATE            "27 Jan 94"

#define DIVIDE_BY_2_MINUS_1             0
#define DIVIDE_BY_2_PLUS_1              1


typedef unsigned int uint;


uint log2( uint n )
{
  uint bit, pow, logn;

  for( bit = 0, pow = 1; bit < 31; bit++, pow <<= 1 )
  {
    if( n == pow ) logn = bit;
  }

  return( logn );
}


int powerof2( int n )
{
  return( n == ( n & (-n) ) );
}


void dodiv2m1( uint logd, uint logmsb )
{
  /* Output instructions to do division by 2^n - 1 */
  printf( "\tMOV     a1, a1, lsr #1\n" );

  while( logd < 32 )
  {
    printf( "\tADD     a1, a1, a1, lsr #%d\n", logd );
    logd <<= 1;
  }
  printf( "\tMOV     a1, a1, lsr #%d\n", logmsb - 1 );
}


void dodiv2p1( uint logd, uint logmsb )
{
  /* Output instructions to do division by 2^n + 1 */
  printf( "\tSUB     a1, a1, a1, lsr #%d\n", logd );

  while( logd < 16 )
  {
    logd <<= 1;
    printf( "\tADD     a1, a1, a1, lsr #%d\n", logd );
  }

  printf( "\tMOV     a1, a1, lsr #%d\n", logmsb );
}


void loada4( uint type, uint lsb, uint msb )
{
  /* Constant is too big to be used as an immediate constant, */
  /* so load it into register a4.                             */
  printf( "\tMOV     a4, #0x%x\n", msb );

  switch( type )
  {
  case DIVIDE_BY_2_MINUS_1:
    printf( "\tSUB     a4, a4, #0x%x\n", lsb );
    break;

  case DIVIDE_BY_2_PLUS_1:
    printf( "\tADD     a4, a4, #0x%x\n", lsb );
    break;

  default:
    fputs( "Internal error", stderr );
  }
}


void divideby2( uint type, uint n, uint lsb, uint msb )
{
  uint loglsb;
  uint logmsb;
  uint usinga4;

  loglsb = log2( lsb );
  logmsb = log2( msb );

  printf( "; %s [%s]\n\n", BANNER, DATE );
  printf( "\tAREA |div%d$code|, CODE, READONLY\n\n", n );
  printf( "\tEXPORT udiv%d\n\n", n );
  printf( "udiv%d\n", n );
  printf( "; takes argument in a1\n" );
  printf( "; returns quotient in a1, remainder in a2\n" );
  printf( "; cycles could be saved if only divide or remainder is required\n" );

  usinga4 = ( n >> loglsb ) > 255;
  if( usinga4 )
  {
    loada4( type, lsb, msb );
    printf( "\tSUB     a2, a1, a4\n" );
  }
  else
  {
    printf( "\tSUB     a2, a1, #%d\n", n );
  }

  /* 1/n as a binary number consists of a simple repeating pattern     */
  /* The multiply by 1/n is expanded as a sequence of ARM instructions */
  /* (there is a rounding error which must be corrected later)         */
  switch( type )
  {
  case DIVIDE_BY_2_MINUS_1:
    dodiv2m1( logmsb - loglsb, logmsb );
    /* Now do multiply-by-n */
    printf( "\tRSB     a3, a1, a1, asl #%d\n", logmsb - loglsb );
    break;

  case DIVIDE_BY_2_PLUS_1:
    dodiv2p1( logmsb - loglsb, logmsb );
    /* Now do multiply-by-n */
    printf( "\tADD     a3, a1, a1, asl #%d\n", logmsb - loglsb );
    break;

  default:
    fputs( "Internal error", stderr );
  }

  /* Subtract from adjusted original to obtain remainder */
  printf( "\tSUBS    a2, a2, a3, asl #%d\n", loglsb );

  /* Apply corrections */
  printf( "\tADDPL   a1, a1, #1\n" );
  if( usinga4 )
  {
    printf( "\tADDMI   a2, a2, a4\n" );
  }
  else
  {
    printf( "\tADDMI   a2, a2, #%d\n", n );
  }

  /* Additional test required for divide-by-3, as result could be  */
  /* off by 2 lsb due to accumulated rounding errors.              */
  if( n == 3 )
  {
    printf( "\tCMP     a2, #3\n" );
    printf( "\tADDGE   a1, a1, #1\n" );
    printf( "\tSUBGE   a2, a2, #3\n" );
  }

  printf( "\tMOV     pc, lr\n\n" );
  printf( "\tEND\n" );
}


int main( int argc, char *argv[] )
{
  if( argc != 2 )
  {
    printf( "Usage: divc <n>\n" );
    printf( "Generates optimal ARM code for divide-by-constant\n" );
    printf( "where <n> is one of (2^n-2^m) or (2^n+2^m) eg. 10\n" );
    printf( "Advanced RISC Machines [%s]\n", DATE );
  }
  else
  {
    int num;

    num = atoi( argv[ 1 ] );
    if( num <= 1 )
    {
      fprintf( stderr, "%d is not sensible\n", num );
    }
    else
    {
      uint lsb = 1;

      /* find least-significant bit */
      while( ( num & lsb ) == 0 )
      {
        lsb <<= 1;
      }

      if( powerof2( num ) )
      {
        fprintf( stderr, "%d is an easy case\n", num );
      }
      else if( powerof2( num + lsb ) )
      {
        divideby2( DIVIDE_BY_2_MINUS_1, num, lsb, num + lsb );
      }
      else if( powerof2( num - lsb ) )
      {
        divideby2( DIVIDE_BY_2_PLUS_1, num, lsb, num - lsb );
      }
      else
      {
        fprintf( stderr, "%d is not one of (2^n-2^m) or (2^n+2^m)\n", num );
      }
    }
  }
  return( 0 );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费日韩av| 亚洲一区在线观看网站| 国产一区二区精品久久99| 国产99一区视频免费| 日本精品视频一区二区| 久久久久综合网| 日韩一区和二区| 一区二区三区日韩欧美| 顶级嫩模精品视频在线看| 日韩欧美一级精品久久| 亚洲一区二区三区自拍| 成人动漫在线一区| 精品久久久久久久人人人人传媒 | 91看片淫黄大片一级在线观看| 欧美一区二区三区四区五区 | 欧美性色黄大片手机版| 中文字幕免费一区| 久久99精品视频| 日韩一区二区在线免费观看| 一区二区成人在线视频| 99久久婷婷国产精品综合| 成人午夜免费视频| 欧美韩国一区二区| 国产精品一区一区三区| 精品国产露脸精彩对白| 免费一级欧美片在线观看| 欧美日韩国产bt| 国产精品日日摸夜夜摸av| 国产精品乱人伦中文| 亚洲激情五月婷婷| 裸体歌舞表演一区二区| 亚洲色图丝袜美腿| 国产女同性恋一区二区| 日韩三级电影网址| 在线亚洲一区二区| 国内外精品视频| 中文字幕国产精品一区二区| 欧美丝袜第三区| 日韩精品一区二区三区视频| 日韩av在线免费观看不卡| 56国语精品自产拍在线观看| 亚洲国产精品尤物yw在线观看| 欧美亚洲图片小说| 偷拍自拍另类欧美| 7777精品伊人久久久大香线蕉的 | 成人黄色大片在线观看| 国产精品成人免费在线| 色综合天天综合网国产成人综合天 | 91福利在线观看| 亚洲成av人片在线观看| 欧美精品久久天天躁| 另类小说欧美激情| 国产99久久久久| 最近日韩中文字幕| 欧美男男青年gay1069videost| 免费看日韩a级影片| 国产亚洲欧美激情| 色噜噜狠狠成人中文综合| 婷婷丁香激情综合| 国产亚洲欧洲997久久综合| 色综合久久综合网欧美综合网| 亚洲电影视频在线| 国产婷婷色一区二区三区四区| 成人福利视频在线| 日韩一区二区高清| 国产91丝袜在线播放0| 亚洲综合在线电影| 久久夜色精品国产噜噜av | 国产成都精品91一区二区三| 亚洲久草在线视频| 国产精品一区二区免费不卡 | 蜜桃久久久久久| 激情综合五月婷婷| 91行情网站电视在线观看高清版| 日本黄色一区二区| 日本一区二区动态图| 国产激情91久久精品导航| 日韩经典一区二区| 精品国产免费视频| 欧亚一区二区三区| 福利电影一区二区三区| 亚州成人在线电影| 中文字幕+乱码+中文字幕一区| 欧美日本视频在线| 色综合久久久久久久久久久| 韩国av一区二区| 日本不卡免费在线视频| 亚洲欧美日韩在线| 中文字幕国产精品一区二区| 欧美不卡一区二区三区| 欧美理论在线播放| 色妹子一区二区| 成人av网址在线| 国产精品一二三在| 久久爱www久久做| 视频一区免费在线观看| 一区二区三区高清在线| 国产精品女同互慰在线看| 精品粉嫩超白一线天av| 在线91免费看| 欧美日韩国产大片| 欧美片在线播放| 欧美精品日韩一本| 亚洲一区二区三区四区五区中文| 久久久精品国产免费观看同学| 91精品国产91久久综合桃花| 欧美日韩国产综合一区二区三区 | 高清不卡一二三区| 麻豆成人综合网| 美女视频一区二区| 久久精品国产一区二区| 麻豆一区二区99久久久久| 日韩高清国产一区在线| 日本亚洲视频在线| 日本在线播放一区二区三区| 日本麻豆一区二区三区视频| 欧美一区二区三区四区五区| 日韩欧美区一区二| 日韩精品中文字幕一区 | 亚洲婷婷国产精品电影人久久| 国产精品免费av| 国产精品亚洲第一| 五月天久久比比资源色| 色妹子一区二区| 日韩成人av影视| 亚洲精品乱码久久久久久| 欧美国产一区二区在线观看| 51精品视频一区二区三区| 欧美图区在线视频| 欧美喷潮久久久xxxxx| 欧美天堂一区二区三区| 色综合中文字幕| 欧美日韩午夜在线视频| 久久伊人蜜桃av一区二区| 成熟亚洲日本毛茸茸凸凹| jiyouzz国产精品久久| 91视视频在线直接观看在线看网页在线看 | 欧美性生活影院| 69堂精品视频| 国产亚洲欧美激情| 亚洲一区二区三区中文字幕在线| 亚洲国产精品久久久男人的天堂| 亚洲乱码中文字幕综合| 天堂蜜桃一区二区三区| 国精产品一区一区三区mba桃花 | 99国产精品久久久| 欧美日韩五月天| 久久久99久久| 亚洲另类在线视频| 另类小说综合欧美亚洲| 不卡高清视频专区| 在线综合亚洲欧美在线视频| 欧美精品一区二区蜜臀亚洲| 亚洲欧美另类图片小说| 蜜桃精品视频在线观看| 99久久精品免费| 日韩美一区二区三区| 亚洲丝袜精品丝袜在线| 美女一区二区三区| 色婷婷av一区二区三区之一色屋| 日韩一级二级三级精品视频| 国产精品日韩精品欧美在线 | 怡红院av一区二区三区| 久久se这里有精品| 在线观看网站黄不卡| 国产欧美一区二区精品仙草咪| 亚洲成人午夜影院| 成人av综合在线| 青草国产精品久久久久久| jiyouzz国产精品久久| 久久―日本道色综合久久| 午夜av一区二区| 99国内精品久久| 国产视频一区二区在线观看| 日韩欧美在线综合网| 久久众筹精品私拍模特| 国产高清久久久| 欧美国产日韩亚洲一区| 国产精品视频免费看| 国产成人av一区二区三区在线 | 亚洲成人午夜影院| 色噜噜久久综合| 国产清纯白嫩初高生在线观看91| 日韩国产欧美一区二区三区| 欧美性生活一区| 欧美日韩一区二区三区四区| 精品一区二区精品| 555夜色666亚洲国产免| 亚洲妇女屁股眼交7| 91免费观看在线| 亚洲欧洲美洲综合色网| 成人性生交大片免费看中文| 久久只精品国产| 国产精品一区一区| 国产欧美一区二区在线观看| 国产一区在线视频| 久久久电影一区二区三区| 国产在线日韩欧美| xfplay精品久久| 激情久久五月天|