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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? div_a9e.s

?? arm嵌入式系統(tǒng)開發(fā)--軟件設(shè)計與優(yōu)化隨書源代碼。開發(fā)環(huán)境c。基本運(yùn)算優(yōu)化部分。
?? S
字號:
;// ____________________________________________________________________
;//
;// Copyright (c) 2002, Andrew N. Sloss, Dominic Symes, Chris Wright
;// All rights reserved.
;// ____________________________________________________________________
;// 
;// NON-COMMERCIAL USE License
;// 
;// Redistribution and use in source and binary forms, with or without 
;// modification, are permitted provided that the following conditions 
;// are met: 
;//
;// 1. For NON-COMMERCIAL USE only.
;// 
;// 2. Redistributions of source code must retain the above copyright 
;//    notice, this list of conditions and the following disclaimer. 
;//
;// 3. Redistributions in binary form must reproduce the above 
;//    copyright notice, this list of conditions and the following 
;//    disclaimer in the documentation and/or other materials provided 
;//    with the distribution. 
;//
;// 4. All advertising materials mentioning features or use of this 
;//    software must display the following acknowledgement:
;//
;//    This product includes software developed by Andrew N. Sloss,
;//    Chris Wright and Dominic Symes. 
;//
;//  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY 
;//  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
;//  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
;//  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTORS BE 
;//  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
;//  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
;//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
;//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
;//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
;//  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
;//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
;//  OF SUCH DAMAGE. 
;//
;// If you have questions about this license or would like a different
;// license please email : andrew@sloss.net
;//
;// Section 7.3: Division routines (ARM9E)

        AREA    ch07_3, CODE, READONLY

        EXPORT  udiv_32by32_arm9e
        EXPORT  udiv_q15_arm9e
        EXPORT  udiv_q31_arm9e

;=================================================================////

q       RN 0   ; input denominator d, output quotient q
r       RN 1   ; input numerator n, output remainder r
s       RN 2   ; scratch register
m       RN 3   ; scratch register
a       RN 12  ; scratch register

        ; __value_in_regs struct { unsigned q, r; }
        ;   udiv_32by32_arm9e(unsigned d, unsigned n)
udiv_32by32_arm9e ; instruction   number : comment
        CLZ     s, q                ; 01 : find normalizing shift
        MOVS    a, q, LSL s         ; 02 : perform a lookup on the
        ADD     a, pc, a, LSR#25    ; 03 : most significant 7 bits
        LDRNEB  a, [a, #t32-b32-64] ; 04 : of divisor
b32     SUBS    s, s, #7            ; 05 : correct shift
        RSB     m, q, #0            ; 06 : m = -d
        MOVPL   q, a, LSL s         ; 07 : q approx (1<<32)/d
        ; 1st Newton iteration follows
        MULPL   a, q, m             ; 08 : a = -q*d
        BMI     udiv_by_large_d     ; 09 : large d trap
        SMLAWT  q, q, a, q          ; 10 : q approx q-(q*q*d>>32)
        TEQ     m, m, ASR#1         ; 11 : check for d=0 or d=1
        ; 2nd Newton iteration follows
        MULNE   a, q, m             ; 12 : a = -q*d
        MOVNE   s, #0               ; 13 : s = 0
        SMLALNE s, q, a, q          ; 14 : q = q-(q*q*d>>32)
        BEQ     udiv_by_0_or_1      ; 15 : trap d=0 or d=1
        ; q now accurate enough for a remainder r, 0<=r<3*d
        UMULL   s, q, r, q          ; 16 : q = (r*q)>>32
        ADD     r, r, m             ; 17 : r = n-d
        MLA     r, q, m, r          ; 18 : r = n-(q+1)*d
        ; since 0 <= n-q*d < 3*d, thus -d <= r < 2*d
        CMN     r, m                ; 19 : t = r-d
        SUBCS   r, r, m             ; 20 : if (t<-d || t>=0) r=r+d
        ADDCC   q, q, #1            ; 21 : if (-d<=t && t<0) q=q+1
        ADDPL   r, r, m, LSL#1      ; 22 : if (t>=0) { r=r-2*d
        ADDPL   q, q, #2            ; 23 :             q=q+2 }
        BX      lr                  ; 24 : return {q, r}
udiv_by_large_d
        ; at this point we know d >= 2^(31-6)=2^25
        SUB     a, a, #4            ; 25 : set q to be an
        RSB     s, s, #0            ; 26 : underestimate of
        MOV     q, a, LSR s         ; 27 : (1<<32)/d
        UMULL   s, q, r, q          ; 28 : q = (n*q)>>32
        MLA     r, q, m, r          ; 29 : r = n-q*d
        ; q now accurate enough for a remainder r, 0<=r<4*d
        CMN     m, r, LSR#1         ; 30 : if (r/2 >= d)
        ADDCS   r, r, m, LSL#1      ; 31 : { r=r-2*d;
        ADDCS   q, q, #2            ; 32 :   q=q+2; }
        CMN     m, r                ; 33 : if (r >= d)
        ADDCS   r, r, m             ; 34 : { r=r-d;
        ADDCS   q, q, #1            ; 35 :   q=q+1; }
        BX      lr                  ; 36 : return {q, r}
udiv_by_0_or_1
        ; carry set if d=1, carry clear if d=0
        MOVCS   q, r                ; 37 : if (d==1) { q=n;
        MOVCS   r, #0               ; 38 :             r=0; }
        MOVCC   q, #-1              ; 39 : if (d==0) { q=-1;
        MOVCC   r, #-1              ; 40 :             r=-1; }
        BX      lr                  ; 41 : return {q,r}

        ; table for 32 by 32 bit Newton Raphson divisions
        ; table[0] = 255
        ; table[i] = (1<<14)/(64+i)  for i=1,2,3,...,63
t32     DCB 0xff, 0xfc, 0xf8, 0xf4, 0xf0, 0xed, 0xea, 0xe6
        DCB 0xe3, 0xe0, 0xdd, 0xda, 0xd7, 0xd4, 0xd2, 0xcf
        DCB 0xcc, 0xca, 0xc7, 0xc5, 0xc3, 0xc0, 0xbe, 0xbc
        DCB 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0, 0xae, 0xac
        DCB 0xaa, 0xa8, 0xa7, 0xa5, 0xa3, 0xa2, 0xa0, 0x9f
        DCB 0x9d, 0x9c, 0x9a, 0x99, 0x97, 0x96, 0x94, 0x93
        DCB 0x92, 0x90, 0x8f, 0x8e, 0x8d, 0x8c, 0x8a, 0x89
        DCB 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81

;=================================================================////

q       RN 0    ; input denominator d, quotient estimate q
r       RN 1    ; input numerator n, remainder r
s       RN 2    ; normalisation shift, scratch
d       RN 3    ; Q15 normalised denominator 2^14<=d<2^15

        ; unsigned udiv_q15_arm9e(unsigned d, unsigned q)
udiv_q15_arm9e ; instruction       number : comment
        CLZ     s, q                 ; 01 : choose a shift s to
        SUB     s, s, #17            ; 02 : normalize d to the
        MOVS    d, q, LSL s          ; 03 : range 0.5<=d<1 at Q15
        ADD     q, pc, d, LSR#7      ; 04 : look up q, a Q8
        LDRNEB  q, [q, #t15-b15-128] ; 05 : approximation to 1//d
b15     MOV     r, r, LSL s          ; 06 : normalize numerator
        ADD     q, q, #256           ; 07 : part of table lookup
        ; q is now a Q8, 9-bit estimate to 1//d
        SMULBB  s, q, q              ; 08 : s = q*q at Q16
        CMP     r, d                 ; 09 : check for overflow
        MUL     s, d, s              ; 10 : s = q*q*d at Q31
        MOV     q, q, LSL#9          ; 11 : change q to Q17
        SBC     q, q, s, LSR#15      ; 12 : q = 2*q-q*q*d at Q16
        ; q is now a Q16, 17-bit estimate to 1//d
        SMULWB  q, q, r              ; 13 : q approx n//d at Q15
        BCS     overflow_15          ; 14 : trap overflow case
        SMULBB  s, q, d              ; 15 : s = q*d at Q30
        RSB     r, d, r, LSL#15      ; 16 : r = n-d at Q30
        CMP     r, s                 ; 17 : if (r>=s)
        ADDPL   q, q, #1             ; 18 :   q++
        BX      lr                   ; 19 : return q
overflow_15
        LDR     q, =0x7FFF           ; 20 : q = 0x7FFF
        BX      lr                   ; 21 : return q

        ; table for fractional Newton Raphson division
        ; table[a] = (int)((511*(128-a))/(257+2*a)) 0<=a<128
t15     DCB 0xfe, 0xfa, 0xf6, 0xf2, 0xef, 0xeb, 0xe7, 0xe4
        DCB 0xe0, 0xdd, 0xd9, 0xd6, 0xd2, 0xcf, 0xcc, 0xc9
        DCB 0xc6, 0xc2, 0xbf, 0xbc, 0xb9, 0xb6, 0xb3, 0xb1
        DCB 0xae, 0xab, 0xa8, 0xa5, 0xa3, 0xa0, 0x9d, 0x9b
        DCB 0x98, 0x96, 0x93, 0x91, 0x8e, 0x8c, 0x8a, 0x87
        DCB 0x85, 0x83, 0x80, 0x7e, 0x7c, 0x7a, 0x78, 0x75
        DCB 0x73, 0x71, 0x6f, 0x6d, 0x6b, 0x69, 0x67, 0x65
        DCB 0x63, 0x61, 0x5f, 0x5e, 0x5c, 0x5a, 0x58, 0x56
        DCB 0x54, 0x53, 0x51, 0x4f, 0x4e, 0x4c, 0x4a, 0x49
        DCB 0x47, 0x45, 0x44, 0x42, 0x40, 0x3f, 0x3d, 0x3c
        DCB 0x3a, 0x39, 0x37, 0x36, 0x34, 0x33, 0x32, 0x30
        DCB 0x2f, 0x2d, 0x2c, 0x2b, 0x29, 0x28, 0x27, 0x25
        DCB 0x24, 0x23, 0x21, 0x20, 0x1f, 0x1e, 0x1c, 0x1b
        DCB 0x1a, 0x19, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12
        DCB 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09
        DCB 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01

;=================================================================////

q       RN 0    ; input denominator d, quotient estimate q
r       RN 1    ; input numerator n, remainder high r
s       RN 2    ; normalisation shift, scratch register
d       RN 3    ; Q31 normalised denominator 2^30<=d<2^31
a       RN 12   ; scratch

        ; unsigned udiv_q31_arm9e(unsigned d, unsigned q)
udiv_q31_arm9e ;       instruction number : comment
        CLZ     s, q                 ; 01 : choose a shift s to
        CMP     r, q                 ; 02 : normalize d to the
        MOVCC   d, q, LSL s          ; 03 : range 0.5<=d<1 at Q32
        ADDCC   q, pc, d, LSR#24     ; 04 : look up q, a Q8
        LDRCCB  q, [q, #t15-b31-128] ; 05 : approximation to 1//d
b31     MOVCC   r, r, LSL s          ; 06 : normalize numerator
        ADDCC   q, q, #256           ; 07 : part of table lookup
        ; q is now a Q8, 9-bit estimate to 1//d
        SMULBBCC a, q, q             ; 08 : a = q*q at Q16
        MOVCS   q, #0x7FFFFFFF       ; 09 : overflow case
        UMULLCC s, a, d, a           ; 10 : a = q*q*d at Q16
        BXCS    lr                   ; 11 : exit on overflow
        RSB     q, a, q, LSL#9       ; 12 : q = 2*q-q*q*d at Q16
        ; q is now a Q16, 17-bit estimate to 1//d
        UMULL   a, s, q, q           ; 13 : [s,a] = q*q at Q32
        MOVS    a, a, LSR#1          ; 14 : now halve [s,a] and
        ADC     a, a, s, LSL#31      ; 15 : round so [N,a]=q*q at
        MOVS    s, s, LSL#30         ; 16 : Q31, C=0
        UMULL   s, a, d, a           ; 17 : a = a*d at Q31
        ADDMI   a, a, d              ; 18 : if (N) a+=2*d at Q31
        RSC     q, a, q, LSL#16      ; 19 : q = 2*q-q*q*d at Q31
        ; q is now a Q31 estimate to 1/d
        UMULL   s, q, r, q           ; 20 : q approx n//d at Q31
        ; q is now a Q31 estimate to num/den, remainder<3*d
        UMULL   s, a, d, q           ; 21 : [a,s] = d*q at Q62
        RSBS    s, s, #0             ; 22 : [r,s] = n-d*q
        RSC     r, a, r, LSR#1       ; 23 :  at Q62
        ; [r,s]=(r<<32)+s is now the positive remainder<3*d
        SUBS    s, s, d              ; 24 : [r,s] = n-(d+1)*q
        SBCS    r, r, #0             ; 25 :  at Q62
        ADDPL   q, q, #1             ; 26 : if ([r,s]>=0) q++
        SUBS    s, s, d              ; 27 : [r,s] = [r,s]-d
        SBCS    r, r, #0             ; 28 :  at Q62
        ADDPL   q, q, #1             ; 29 : if ([r,s]>=0) q++
        BX      lr                   ; 30 : return q

        END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级电影视频| 国产精品无码永久免费888| 亚洲综合色噜噜狠狠| 色嗨嗨av一区二区三区| 亚洲一区二三区| 欧美精选一区二区| 精品在线你懂的| 国产日韩精品一区二区浪潮av| 国产黄色精品视频| 亚洲欧洲综合另类| 制服丝袜日韩国产| 久草热8精品视频在线观看| 国产亚洲综合性久久久影院| 99精品偷自拍| 成人毛片视频在线观看| 成人欧美一区二区三区| 在线看日韩精品电影| 美女一区二区三区| 欧美极品aⅴ影院| 欧美无砖砖区免费| 久久av老司机精品网站导航| 国产精品久久久久久久第一福利| 日本精品免费观看高清观看| 免费的国产精品| 中文字幕va一区二区三区| 91精品办公室少妇高潮对白| 蜜臀av一级做a爰片久久| 欧美国产激情二区三区| 欧美乱妇15p| 国产91色综合久久免费分享| 亚洲1区2区3区视频| 久久精品日韩一区二区三区| 欧美亚洲综合久久| 国产在线精品一区二区夜色| 樱桃视频在线观看一区| 久久午夜电影网| 欧美色电影在线| 国产a级毛片一区| 日本中文字幕一区二区视频| 中文字幕高清不卡| 日韩欧美一级特黄在线播放| 色av成人天堂桃色av| 韩国中文字幕2020精品| 亚洲国产毛片aaaaa无费看| 国产日韩高清在线| 日韩精品一区二区三区在线 | 亚洲午夜激情网站| 国产亚洲欧洲997久久综合| 欧美精品在线观看播放| 91免费在线看| 不卡av在线网| 国产精品一区2区| 奇米四色…亚洲| 亚洲一级二级三级在线免费观看| 中文字幕高清一区| 性久久久久久久| 亚洲精品免费视频| 国产精品麻豆99久久久久久| 久久一留热品黄| 欧美日韩国产大片| 欧美羞羞免费网站| 色综合久久久久| 97久久久精品综合88久久| 国产精品一级在线| 国内成人自拍视频| 另类人妖一区二区av| 日韩高清在线一区| 午夜伦欧美伦电影理论片| 亚洲与欧洲av电影| 一个色妞综合视频在线观看| 亚洲日本在线观看| 国产精品久久精品日日| 国产精品你懂的| 国产精品视频你懂的| 国产女同互慰高潮91漫画| 久久久综合视频| 久久精品无码一区二区三区| 久久久噜噜噜久久人人看| 精品福利在线导航| 久久久午夜电影| 久久久欧美精品sm网站| 国产午夜精品一区二区三区嫩草| 欧美va亚洲va香蕉在线| 久久综合资源网| 久久理论电影网| 国产精品欧美综合在线| 综合久久久久综合| 一区二区三区 在线观看视频| 亚洲另类色综合网站| 亚洲国产日韩一级| 日日夜夜精品视频天天综合网| 日韩电影在线观看电影| 久久99国内精品| 国产成人综合亚洲91猫咪| 99久久精品国产导航| 欧美性感一类影片在线播放| 在线不卡免费欧美| 一个色在线综合| 天使萌一区二区三区免费观看| 麻豆成人免费电影| 成人伦理片在线| 欧美日韩免费在线视频| 精品日韩成人av| 国产精品久久三区| 午夜一区二区三区视频| 寂寞少妇一区二区三区| 99视频在线精品| 欧美日韩不卡一区二区| 久久综合久久综合久久综合| 亚洲少妇30p| 免费高清成人在线| 成av人片一区二区| 7777精品久久久大香线蕉| 久久婷婷国产综合精品青草| 亚洲天堂网中文字| 免费黄网站欧美| 91热门视频在线观看| 日韩视频在线你懂得| 国产精品不卡一区二区三区| 日一区二区三区| 99精品视频在线播放观看| 日韩免费看的电影| 日韩美女久久久| 极品少妇xxxx精品少妇| 色香蕉成人二区免费| 精品国产一区二区三区久久久蜜月| 日韩伦理av电影| 极品少妇xxxx精品少妇偷拍| 欧美在线视频日韩| 久久久久久久久免费| 亚洲v精品v日韩v欧美v专区| 精品99999| 亚洲精品欧美专区| 国产suv精品一区二区6| 69堂精品视频| 亚洲免费看黄网站| 成人一区二区三区视频| 日韩欧美一区电影| 午夜视频一区二区三区| 99re热视频这里只精品| 精品成a人在线观看| 强制捆绑调教一区二区| 欧美视频一区二区| 亚洲欧洲精品一区二区三区| 国产乱子伦一区二区三区国色天香| 欧美吞精做爰啪啪高潮| 日韩理论片在线| 不卡欧美aaaaa| 国产欧美日韩精品一区| 国产一区二区在线观看免费| 亚洲国产激情av| 激情综合色综合久久综合| 欧美一区二区三区视频在线观看| 亚洲欧美激情在线| av影院午夜一区| 国产精品免费视频网站| 国产精品自拍av| 精品国产精品一区二区夜夜嗨| 热久久一区二区| 91精品国产综合久久小美女| 五月天视频一区| 在线观看区一区二| 亚洲综合无码一区二区| 色伊人久久综合中文字幕| 亚洲色图在线视频| 91麻豆高清视频| 亚洲一区二区欧美日韩| 欧美色电影在线| 日韩成人免费在线| 欧美一区二区在线视频| 免费观看成人鲁鲁鲁鲁鲁视频| 91精品国产福利在线观看| 蜜桃精品视频在线| 2021中文字幕一区亚洲| 国产精品一二二区| 欧美国产激情一区二区三区蜜月| 成人午夜免费av| 亚洲免费资源在线播放| 欧美日韩精品福利| 日韩av一二三| 久久综合久久综合久久| 成人性生交大合| 自拍偷拍亚洲综合| 欧美午夜一区二区三区免费大片| 天天色 色综合| 精品久久国产老人久久综合| 国产成人丝袜美腿| 国产精品久99| 欧美影视一区二区三区| 日韩福利视频网| xnxx国产精品| 91免费精品国自产拍在线不卡| 亚洲一级不卡视频| 欧美大片拔萝卜| www.激情成人| 无吗不卡中文字幕| 久久午夜电影网| 91激情在线视频| 韩国精品久久久| 亚洲三级在线看|