@@ -2768,47 +2768,23 @@ define i8 @ctlz.i8(i8) {
27682768; Z80: ; %bb.0:
27692769; Z80-NEXT: ld iy, 0
27702770; Z80-NEXT: add iy, sp
2771- ; Z80-NEXT: ld l, (iy + 2)
2772- ; Z80-NEXT: ld a, l
2773- ; Z80-NEXT: or a, a
2774- ; Z80-NEXT: jr nz, BB31_2
2775- ; Z80-NEXT: ; %bb.1:
2776- ; Z80-NEXT: ld a, 8
2777- ; Z80-NEXT: ret
2778- ; Z80-NEXT: BB31_2: ; %cond.false
2779- ; Z80-NEXT: ld a, l
2771+ ; Z80-NEXT: ld a, (iy + 2)
27802772; Z80-NEXT: call __bctlz
27812773; Z80-NEXT: ret
27822774;
27832775; EZ80-CODE16-LABEL: ctlz.i8:
27842776; EZ80-CODE16: ; %bb.0:
27852777; EZ80-CODE16-NEXT: ld iy, 0
27862778; EZ80-CODE16-NEXT: add iy, sp
2787- ; EZ80-CODE16-NEXT: ld l, (iy + 2)
2788- ; EZ80-CODE16-NEXT: ld a, l
2789- ; EZ80-CODE16-NEXT: or a, a
2790- ; EZ80-CODE16-NEXT: jr nz, BB31_2
2791- ; EZ80-CODE16-NEXT: ; %bb.1:
2792- ; EZ80-CODE16-NEXT: ld a, 8
2793- ; EZ80-CODE16-NEXT: ret
2794- ; EZ80-CODE16-NEXT: BB31_2: ; %cond.false
2795- ; EZ80-CODE16-NEXT: ld a, l
2779+ ; EZ80-CODE16-NEXT: ld a, (iy + 2)
27962780; EZ80-CODE16-NEXT: call __bctlz
27972781; EZ80-CODE16-NEXT: ret
27982782;
27992783; EZ80-LABEL: ctlz.i8:
28002784; EZ80: ; %bb.0:
28012785; EZ80-NEXT: ld iy, 0
28022786; EZ80-NEXT: add iy, sp
2803- ; EZ80-NEXT: ld l, (iy + 3)
2804- ; EZ80-NEXT: ld a, l
2805- ; EZ80-NEXT: or a, a
2806- ; EZ80-NEXT: jr nz, BB31_2
2807- ; EZ80-NEXT: ; %bb.1:
2808- ; EZ80-NEXT: ld a, 8
2809- ; EZ80-NEXT: ret
2810- ; EZ80-NEXT: BB31_2: ; %cond.false
2811- ; EZ80-NEXT: ld a, l
2787+ ; EZ80-NEXT: ld a, (iy + 3)
28122788; EZ80-NEXT: call __bctlz
28132789; EZ80-NEXT: ret
28142790 call i8 @llvm.ctlz.i8 (i8 %0 )
@@ -2822,14 +2798,6 @@ define i16 @ctlz.i16(i16) {
28222798; Z80-NEXT: add iy, sp
28232799; Z80-NEXT: ld l, (iy + 2)
28242800; Z80-NEXT: ld h, (iy + 3)
2825- ; Z80-NEXT: add hl, bc
2826- ; Z80-NEXT: or a, a
2827- ; Z80-NEXT: sbc hl, bc
2828- ; Z80-NEXT: jr nz, BB32_2
2829- ; Z80-NEXT: ; %bb.1:
2830- ; Z80-NEXT: ld hl, 16
2831- ; Z80-NEXT: ret
2832- ; Z80-NEXT: BB32_2: ; %cond.false
28332801; Z80-NEXT: call __sctlz
28342802; Z80-NEXT: ld l, a
28352803; Z80-NEXT: ld h, 0
@@ -2840,14 +2808,6 @@ define i16 @ctlz.i16(i16) {
28402808; EZ80-CODE16-NEXT: ld iy, 0
28412809; EZ80-CODE16-NEXT: add iy, sp
28422810; EZ80-CODE16-NEXT: ld hl, (iy + 2)
2843- ; EZ80-CODE16-NEXT: add hl, bc
2844- ; EZ80-CODE16-NEXT: or a, a
2845- ; EZ80-CODE16-NEXT: sbc hl, bc
2846- ; EZ80-CODE16-NEXT: jr nz, BB32_2
2847- ; EZ80-CODE16-NEXT: ; %bb.1:
2848- ; EZ80-CODE16-NEXT: ld hl, 16
2849- ; EZ80-CODE16-NEXT: ret
2850- ; EZ80-CODE16-NEXT: BB32_2: ; %cond.false
28512811; EZ80-CODE16-NEXT: call __sctlz
28522812; EZ80-CODE16-NEXT: ld l, a
28532813; EZ80-CODE16-NEXT: ld h, 0
@@ -2858,14 +2818,6 @@ define i16 @ctlz.i16(i16) {
28582818; EZ80-NEXT: ld iy, 0
28592819; EZ80-NEXT: add iy, sp
28602820; EZ80-NEXT: ld hl, (iy + 3)
2861- ; EZ80-NEXT: add.sis hl, bc
2862- ; EZ80-NEXT: or a, a
2863- ; EZ80-NEXT: sbc.sis hl, bc
2864- ; EZ80-NEXT: jr nz, BB32_2
2865- ; EZ80-NEXT: ; %bb.1:
2866- ; EZ80-NEXT: ld.sis hl, 16
2867- ; EZ80-NEXT: ret
2868- ; EZ80-NEXT: BB32_2: ; %cond.false
28692821; EZ80-NEXT: ; kill: def $hl killed $hl killed $uhl
28702822; EZ80-NEXT: call __sctlz
28712823; EZ80-NEXT: ld l, a
@@ -2993,13 +2945,6 @@ define i8 @cttz.i8(i8) {
29932945; Z80-NEXT: add iy, sp
29942946; Z80-NEXT: ld l, (iy + 2)
29952947; Z80-NEXT: ld a, l
2996- ; Z80-NEXT: or a, a
2997- ; Z80-NEXT: jr nz, BB35_2
2998- ; Z80-NEXT: ; %bb.1:
2999- ; Z80-NEXT: ld a, 8
3000- ; Z80-NEXT: ret
3001- ; Z80-NEXT: BB35_2: ; %cond.false
3002- ; Z80-NEXT: ld a, l
30032948; Z80-NEXT: cpl
30042949; Z80-NEXT: dec l
30052950; Z80-NEXT: and a, l
@@ -3012,13 +2957,6 @@ define i8 @cttz.i8(i8) {
30122957; EZ80-CODE16-NEXT: add iy, sp
30132958; EZ80-CODE16-NEXT: ld l, (iy + 2)
30142959; EZ80-CODE16-NEXT: ld a, l
3015- ; EZ80-CODE16-NEXT: or a, a
3016- ; EZ80-CODE16-NEXT: jr nz, BB35_2
3017- ; EZ80-CODE16-NEXT: ; %bb.1:
3018- ; EZ80-CODE16-NEXT: ld a, 8
3019- ; EZ80-CODE16-NEXT: ret
3020- ; EZ80-CODE16-NEXT: BB35_2: ; %cond.false
3021- ; EZ80-CODE16-NEXT: ld a, l
30222960; EZ80-CODE16-NEXT: cpl
30232961; EZ80-CODE16-NEXT: dec l
30242962; EZ80-CODE16-NEXT: and a, l
@@ -3031,13 +2969,6 @@ define i8 @cttz.i8(i8) {
30312969; EZ80-NEXT: add iy, sp
30322970; EZ80-NEXT: ld l, (iy + 3)
30332971; EZ80-NEXT: ld a, l
3034- ; EZ80-NEXT: or a, a
3035- ; EZ80-NEXT: jr nz, BB35_2
3036- ; EZ80-NEXT: ; %bb.1:
3037- ; EZ80-NEXT: ld a, 8
3038- ; EZ80-NEXT: ret
3039- ; EZ80-NEXT: BB35_2: ; %cond.false
3040- ; EZ80-NEXT: ld a, l
30412972; EZ80-NEXT: cpl
30422973; EZ80-NEXT: dec l
30432974; EZ80-NEXT: and a, l
@@ -3052,30 +2983,21 @@ define i16 @cttz.i16(i16) {
30522983; Z80: ; %bb.0:
30532984; Z80-NEXT: ld iy, 0
30542985; Z80-NEXT: add iy, sp
3055- ; Z80-NEXT: ld l, (iy + 2)
3056- ; Z80-NEXT: ld h, (iy + 3)
3057- ; Z80-NEXT: add hl, bc
3058- ; Z80-NEXT: or a, a
3059- ; Z80-NEXT: sbc hl, bc
3060- ; Z80-NEXT: jr nz, BB36_2
3061- ; Z80-NEXT: ; %bb.1:
3062- ; Z80-NEXT: ld hl, 16
3063- ; Z80-NEXT: ret
3064- ; Z80-NEXT: BB36_2: ; %cond.false
3065- ; Z80-NEXT: ld a, l
2986+ ; Z80-NEXT: ld c, (iy + 2)
2987+ ; Z80-NEXT: ld b, (iy + 3)
2988+ ; Z80-NEXT: ld a, c
30662989; Z80-NEXT: cpl
3067- ; Z80-NEXT: ld e , a
3068- ; Z80-NEXT: ld a, h
2990+ ; Z80-NEXT: ld l , a
2991+ ; Z80-NEXT: ld a, b
30692992; Z80-NEXT: cpl
3070- ; Z80-NEXT: ld c, a
3071- ; Z80-NEXT: dec hl
3072- ; Z80-NEXT: ld a, e
3073- ; Z80-NEXT: and a, l
30742993; Z80-NEXT: ld e, a
3075- ; Z80-NEXT: ld a, c
3076- ; Z80-NEXT: and a, h
3077- ; Z80-NEXT: ld d, a
3078- ; Z80-NEXT: ex de, hl
2994+ ; Z80-NEXT: dec bc
2995+ ; Z80-NEXT: ld a, l
2996+ ; Z80-NEXT: and a, c
2997+ ; Z80-NEXT: ld l, a
2998+ ; Z80-NEXT: ld a, e
2999+ ; Z80-NEXT: and a, b
3000+ ; Z80-NEXT: ld h, a
30793001; Z80-NEXT: call __spopcnt
30803002; Z80-NEXT: ld l, a
30813003; Z80-NEXT: ld h, 0
@@ -3085,29 +3007,20 @@ define i16 @cttz.i16(i16) {
30853007; EZ80-CODE16: ; %bb.0:
30863008; EZ80-CODE16-NEXT: ld iy, 0
30873009; EZ80-CODE16-NEXT: add iy, sp
3088- ; EZ80-CODE16-NEXT: ld hl, (iy + 2)
3089- ; EZ80-CODE16-NEXT: add hl, bc
3090- ; EZ80-CODE16-NEXT: or a, a
3091- ; EZ80-CODE16-NEXT: sbc hl, bc
3092- ; EZ80-CODE16-NEXT: jr nz, BB36_2
3093- ; EZ80-CODE16-NEXT: ; %bb.1:
3094- ; EZ80-CODE16-NEXT: ld hl, 16
3095- ; EZ80-CODE16-NEXT: ret
3096- ; EZ80-CODE16-NEXT: BB36_2: ; %cond.false
3097- ; EZ80-CODE16-NEXT: ld a, l
3010+ ; EZ80-CODE16-NEXT: ld bc, (iy + 2)
3011+ ; EZ80-CODE16-NEXT: ld a, c
30983012; EZ80-CODE16-NEXT: cpl
3099- ; EZ80-CODE16-NEXT: ld e , a
3100- ; EZ80-CODE16-NEXT: ld a, h
3013+ ; EZ80-CODE16-NEXT: ld l , a
3014+ ; EZ80-CODE16-NEXT: ld a, b
31013015; EZ80-CODE16-NEXT: cpl
3102- ; EZ80-CODE16-NEXT: ld c, a
3103- ; EZ80-CODE16-NEXT: dec hl
3104- ; EZ80-CODE16-NEXT: ld a, e
3105- ; EZ80-CODE16-NEXT: and a, l
31063016; EZ80-CODE16-NEXT: ld e, a
3107- ; EZ80-CODE16-NEXT: ld a, c
3108- ; EZ80-CODE16-NEXT: and a, h
3109- ; EZ80-CODE16-NEXT: ld d, a
3110- ; EZ80-CODE16-NEXT: ex de, hl
3017+ ; EZ80-CODE16-NEXT: dec bc
3018+ ; EZ80-CODE16-NEXT: ld a, l
3019+ ; EZ80-CODE16-NEXT: and a, c
3020+ ; EZ80-CODE16-NEXT: ld l, a
3021+ ; EZ80-CODE16-NEXT: ld a, e
3022+ ; EZ80-CODE16-NEXT: and a, b
3023+ ; EZ80-CODE16-NEXT: ld h, a
31113024; EZ80-CODE16-NEXT: call __spopcnt
31123025; EZ80-CODE16-NEXT: ld l, a
31133026; EZ80-CODE16-NEXT: ld h, 0
@@ -3117,30 +3030,20 @@ define i16 @cttz.i16(i16) {
31173030; EZ80: ; %bb.0:
31183031; EZ80-NEXT: ld iy, 0
31193032; EZ80-NEXT: add iy, sp
3120- ; EZ80-NEXT: ld hl, (iy + 3)
3121- ; EZ80-NEXT: add.sis hl, bc
3122- ; EZ80-NEXT: or a, a
3123- ; EZ80-NEXT: sbc.sis hl, bc
3124- ; EZ80-NEXT: jr nz, BB36_2
3125- ; EZ80-NEXT: ; %bb.1:
3126- ; EZ80-NEXT: ld.sis hl, 16
3127- ; EZ80-NEXT: ret
3128- ; EZ80-NEXT: BB36_2: ; %cond.false
3129- ; EZ80-NEXT: ld a, l
3033+ ; EZ80-NEXT: ld bc, (iy + 3)
3034+ ; EZ80-NEXT: ld a, c
31303035; EZ80-NEXT: cpl
3131- ; EZ80-NEXT: ld e , a
3132- ; EZ80-NEXT: ld a, h
3036+ ; EZ80-NEXT: ld l , a
3037+ ; EZ80-NEXT: ld a, b
31333038; EZ80-NEXT: cpl
3134- ; EZ80-NEXT: ld c, a
3135- ; EZ80-NEXT: dec.sis hl
3136- ; EZ80-NEXT: ld a, e
3137- ; EZ80-NEXT: and a, l
31383039; EZ80-NEXT: ld e, a
3139- ; EZ80-NEXT: ld a, c
3140- ; EZ80-NEXT: and a, h
3141- ; EZ80-NEXT: ld d, a
3142- ; EZ80-NEXT: ld l, e
3143- ; EZ80-NEXT: ld h, d
3040+ ; EZ80-NEXT: dec.sis bc
3041+ ; EZ80-NEXT: ld a, l
3042+ ; EZ80-NEXT: and a, c
3043+ ; EZ80-NEXT: ld l, a
3044+ ; EZ80-NEXT: ld a, e
3045+ ; EZ80-NEXT: and a, b
3046+ ; EZ80-NEXT: ld h, a
31443047; EZ80-NEXT: call __spopcnt
31453048; EZ80-NEXT: ld l, a
31463049; EZ80-NEXT: ld h, 0
0 commit comments