
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK CODE SIZE REDUCTION FOR LONG LONG
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	ld	de,#%1 + %3
	ld	hl,#%2
	add	hl,sp
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1+%3
	ld	hl,#%2
	add	hl,sp
	ld	bc,#0x0008
	ldir
	; peephole z88dk-code-size-reduction-1a
}

replace restart {
	ld	de,#%1
	ld	hl,#%2
	add	hl,sp
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1
	ld	hl,#%2 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_de
	; peephole z88dk-code-size-reduction-1b
}

replace restart {
	ld	de,#%1 + %3
	ld	hl,#%2
	add	hl,sp
	ex	de,hl
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1+%3
	ld	hl,#%2
	add	hl,sp
	ex	de,hl
	ld	bc,#0x0008
	ldir
	; peephole z88dk-code-size-reduction-2a
}

replace restart {
	ld	de,#%1
	ld	hl,#%2
	add	hl,sp
	ex	de,hl
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1
	ld	hl,#%2 + 2
	call	____sdcc_ll_copy_src_de_dst_hlsp
	; peephole z88dk-code-size-reduction-2b
}

replace restart {
	ld	de,#%1
	ld	hl,#%2 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_de
	ld	de,#%1
	ld	hl,#%2 + 2
	call	____sdcc_ll_copy_src_de_dst_hlsp
} by {
	ld	de,#%1
	ld	hl,#%2 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_de
	ex	de,hl
	; peephole z88dk-code-size-reduction-3
}

replace restart {
	ld	a,%9 (ix)
	add	a, %1 (ix)
	ld	%1 (ix),a
	ld	a,%10 (ix)
	adc	a, %2 (ix)
	ld	%2 (ix),a
	ld	a,%11 (ix)
	adc	a, %3 (ix)
	ld	%3 (ix),a
	ld	a,%12 (ix)
	adc	a, %4 (ix)
	ld	%4 (ix),a
	ld	a,%13 (ix)
	adc	a, %5 (ix)
	ld	%5 (ix),a
	ld	a,%14 (ix)
	adc	a, %6 (ix)
	ld	%6 (ix),a
	ld	a,%15 (ix)
	adc	a, %7 (ix)
	ld	%7 (ix),a
	ld	a,%16 (ix)
	adc	a, %8 (ix)
	ld	%8 (ix),a
} by {
	push	de
	push	hl
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_add_deix_hlix
	pop	hl
	pop	de
	; peephole z88dk-code-size-reduction-4a
}

replace restart {
	push	%4
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_add_deix_hlix
	pop	%4
} by {
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_add_deix_hlix
	; peephole z88dk-code-size-reduction-4b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_add_deix_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_add_deix_hlix
	pop	%5
	; peephole z88dk-code-size-reduction-4c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	sub	a, %9 (ix)
	ld	%1 (ix),a
	ld	a,%2 (ix)
	sbc	a, %10 (ix)
	ld	%2 (ix),a
	ld	a,%3 (ix)
	sbc	a, %11 (ix)
	ld	%3 (ix),a
	ld	a,%4 (ix)
	sbc	a, %12 (ix)
	ld	%4 (ix),a
	ld	a,%5 (ix)
	sbc	a, %13 (ix)
	ld	%5 (ix),a
	ld	a,%6 (ix)
	sbc	a, %14 (ix)
	ld	%6 (ix),a
	ld	a,%7 (ix)
	sbc	a, %15 (ix)
	ld	%7 (ix),a
	ld	a,%8 (ix)
	sbc	a, %16 (ix)
	ld	%8 (ix),a
} by {
	push	de
	push	hl
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_sub_deix_hlix
	pop	hl
	pop	de
	; peephole z88dk-code-size-reduction-5a
}

replace restart {
	push	%4
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_sub_deix_hlix
	pop	%4
} by {
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_sub_deix_hlix
	; peephole z88dk-code-size-reduction-5b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_sub_deix_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,#%1
	ld	hl,#%9
	call	____sdcc_ll_sub_deix_hlix
	pop	%5
	; peephole z88dk-code-size-reduction-5c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	push	af
	inc	sp
	ld	a,%2 (ix)
	push	af
	inc	sp
	ld	a,%3 (ix)
	push	af
	inc	sp
	ld	a,%4 (ix)
	push	af
	inc	sp
	ld	a,%5 (ix)
	push	af
	inc	sp
	ld	a,%6 (ix)
	push	af
	inc	sp
	ld	a,%7 (ix)
	push	af
	inc	sp
	ld	a,%8 (ix)
	push	af
	inc	sp
} by {
	ld	hl,#%1
	call	____sdcc_ll_push_hlix
	; peephole z88dk-code-size-reduction-6a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,%1 (ix)
	ld	d,%2 (ix)
	ld	hl,#%3
	add	hl,sp
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1
	ld	hl,#%3 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_deixm
	; peephole z88dk-code-size-reduction-7
}

replace restart {
	ld	e,%1 (ix)
	ld	d,%2 (ix)
	ld	hl,#%3
	add	hl,sp
	ex	de,hl
	ld	bc,#0x0008
	ldir
} by {
	ld	de,#%1
	ld	hl,#%3 + 2
	call	____sdcc_ll_copy_src_deixm_dst_hlsp
	; peephole z88dk-code-size-reduction-8
}

replace restart {
	ld	de,#%1
	ld	hl,#%3 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_deixm
	ld	de,#%1
	ld	hl,#%3 + 2
	call	____sdcc_ll_copy_src_deixm_dst_hlsp
} by {
	ld	de,#%1
	ld	hl,#%3 + 2
	call	____sdcc_ll_copy_src_hlsp_dst_deixm
	ex	de,hl
	; peephole z88dk-code-size-reduction-9
}	

replace restart {
	inc	b
	jp	%2
%3:
	sra	%4 (ix)
	rr	%5 (ix)
	rr	%6 (ix)
	rr	%7 (ix)
	rr	%8 (ix)
	rr	%9 (ix)
	rr	%10 (ix)
	rr	%11 (ix)
%2:
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,b
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-10a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%3:
	sra	%4 (ix)
	rr	%5 (ix)
	rr	%6 (ix)
	rr	%7 (ix)
	rr	%8 (ix)
	rr	%9 (ix)
	rr	%10 (ix)
	rr	%11 (ix)
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-10a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	%4
} by {
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	; peephole z88dk-code-size-reduction-10b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	%5
	; peephole z88dk-code-size-reduction-10c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_asr_hlix_a
	pop	%6
	pop	%5
	; peephole z88dk-code-size-reduction-10d
} if notUsed(%4)

replace restart {
	inc	b
	jp	%2
%3:
	srl	%4 (ix)
	rr	%5 (ix)
	rr	%6 (ix)
	rr	%7 (ix)
	rr	%8 (ix)
	rr	%9 (ix)
	rr	%10 (ix)
	rr	%11 (ix)
%2:
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,b
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-11a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%3:
	srl	%4 (ix)
	rr	%5 (ix)
	rr	%6 (ix)
	rr	%7 (ix)
	rr	%8 (ix)
	rr	%9 (ix)
	rr	%10 (ix)
	rr	%11 (ix)
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-11a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	%4
} by {
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	; peephole z88dk-code-size-reduction-11b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	%5
	; peephole z88dk-code-size-reduction-11c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsr_hlix_a
	pop	%6
	pop	%5
	; peephole z88dk-code-size-reduction-11d
} if notUsed(%4)

replace restart {
	inc	b
	jp	%2
%3:
	sla	%4 (ix)
	rl	%5 (ix)
	rl	%6 (ix)
	rl	%7 (ix)
	rl	%8 (ix)
	rl	%9 (ix)
	rl	%10 (ix)
	rl	%11 (ix)
%2:
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,b
	ld	hl,%4
	call	____sdcc_ll_lsl_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-12a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%3:
	sla	%4 (ix)
	rl	%5 (ix)
	rl	%6 (ix)
	rl	%7 (ix)
	rl	%8 (ix)
	rl	%9 (ix)
	rl	%10 (ix)
	rl	%11 (ix)
	djnz	%3
} by {
	push	bc
	push	de
	push	hl
	ld	a,%1
	ld	hl,%4
	call	____sdcc_ll_lsl_hlix_a
	pop	hl
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-size-reduction-12a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	pop	%4
} by {
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	; peephole z88dk-code-size-reduction-12b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	pop	%5
	; peephole z88dk-code-size-reduction-12c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	a,%1
	ld	hl,%11
	call	____sdcc_ll_lsl_hlix_a
	pop	%6
	pop	%5
	; peephole z88dk-code-size-reduction-12d
} if notUsed(%4)

replace restart {
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
} by {
	call	____sdcc_ll_push_mhl
	; peephole z88dk-code-size-reduction-13a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	(hl),a
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	(hl),a
	call	____sdcc_ll_push_mhl
	; peephole z88dk-code-size-reduction-13b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%10
	ld	(hl),a
	ld	a,%2 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%3 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%4 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%5 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%6 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%7 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%8 (ix)
	inc	hl
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	de,%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hl
	pop	de
	pop	bc
	ld	hl,#%10 + 7
	; peephole z88dk-code-size-reduction-14a
}
// notUsed('a')

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%10 + %11
	ld	(hl),a
	ld	a,%2 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%3 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%4 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%5 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%6 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%7 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%8 (ix)
	inc	hl
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	de,%1
	ld	hl,#%10+%11
	call	____sdcc_ll_copy_src_deix_dst_hl
	pop	de
	pop	bc
	ld	hl,#%10+%11 + 7
	; peephole z88dk-code-size-reduction-14b
}
// notUsed('a')

replace restart {
	push	%4
	ld	de,%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hl
	pop	%4
} by {
	ld	de,%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hl
	; peephole z88dk-code-size-reduction-14c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	de,%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hl
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hl
	pop	%5
	; peephole z88dk-code-size-reduction-14d
} if notUsed(%4)

replace restart {
	ld	hl,#%10
	ld	a,(hl)
	ld	hl,#%20
	add	a, (hl)
	ld	%1 (ix),a
	ld	hl,#%10 + %11
	ld	a,(hl)
	ld	hl,#%20 + %21
	adc	a, (hl)
	ld	%2 (ix),a
	ld	hl,#%10 + %12
	ld	a,(hl)
	ld	hl,#%20 + %22
	adc	a, (hl)
	ld	%3 (ix),a
	ld	hl,#%10 + %13
	ld	a,(hl)
	ld	hl,#%20 + %23
	adc	a, (hl)
	ld	%4 (ix),a
	ld	hl,#%10 + %14
	ld	a,(hl)
	ld	hl,#%20 + %24
	adc	a, (hl)
	ld	%5 (ix),a
	ld	hl,#%10 + %15
	ld	a,(hl)
	ld	hl,#%20 + %25
	adc	a, (hl)
	ld	%6 (ix),a
	ld	hl,#%10 + %16
	ld	a,(hl)
	ld	hl,#%20 + %26
	adc	a, (hl)
	ld	%7 (ix),a
	ld	hl,#%10 + %17
	ld	a,(hl)
	ld	hl,#%20 + %27
	adc	a, (hl)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_add_deix_bc_hl
	pop	de
	pop	bc
	; peephole z88dk-code-size-reduction-15a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_add_deix_bc_hl
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_add_deix_bc_hl
	; peephole z88dk-code-size-reduction-15b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_add_deix_bc_hl
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_add_deix_bc_hl
	pop	%5
	; peephole z88dk-code-size-reduction-15c
} if notUsed(%4)

replace restart {
	ld	hl,#%10
	ld	a,(hl)
	ld	hl,#%20
	sub	a, (hl)
	ld	%1 (ix),a
	ld	hl,#%10 + %11
	ld	a,(hl)
	ld	hl,#%20 + %21
	sbc	a, (hl)
	ld	%2 (ix),a
	ld	hl,#%10 + %12
	ld	a,(hl)
	ld	hl,#%20 + %22
	sbc	a, (hl)
	ld	%3 (ix),a
	ld	hl,#%10 + %13
	ld	a,(hl)
	ld	hl,#%20 + %23
	sbc	a, (hl)
	ld	%4 (ix),a
	ld	hl,#%10 + %14
	ld	a,(hl)
	ld	hl,#%20 + %24
	sbc	a, (hl)
	ld	%5 (ix),a
	ld	hl,#%10 + %15
	ld	a,(hl)
	ld	hl,#%20 + %25
	sbc	a, (hl)
	ld	%6 (ix),a
	ld	hl,#%10 + %16
	ld	a,(hl)
	ld	hl,#%20 + %26
	sbc	a, (hl)
	ld	%7 (ix),a
	ld	hl,#%10 + %17
	ld	a,(hl)
	ld	hl,#%20 + %27
	sbc	a, (hl)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_sub_deix_bc_hl
	pop	de
	pop	bc
	; peephole z88dk-code-size-reduction-16a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_sub_deix_bc_hl
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_sub_deix_bc_hl
	; peephole z88dk-code-size-reduction-16b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_sub_deix_bc_hl
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%1
	ld	hl,#%20
	call	____sdcc_ll_sub_deix_bc_hl
	pop	%5
	; peephole z88dk-code-size-reduction-16c
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	add	hl,sp
	ex	de,hl
	ld	hl,#%2
	add	hl,sp
	ld	bc,#8
	ldir
} by {
	ld	de,#%2 + 2
	ld	hl,#%1 + 2
	call	____sdcc_ll_copy_src_desp_dst_hlsp
	; peephole z88dk-code-size-reduction-17
}

replace restart {
	ld	hl,#%10
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%5 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%6 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%7 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	pop	de
	pop	bc
	ld	hl,#%10 + 7
	; peephole z88dk-code-size-reduction-18a1
}
// notUsed('a')

replace restart {
	ld	hl,#%10 + %11
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%5 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%6 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%7 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	ld	de,#%10+%11
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	pop	de
	pop	bc
	ld	hl,#%10+%11 + 7
	; peephole z88dk-code-size-reduction-18a2
}
// notUsed('a')

replace restart {
	push	%4
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	pop	%4
} by {
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	; peephole z88dk-code-size-reduction-18b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_copy_src_de_dst_hlix
	pop	%5
	; peephole z88dk-code-size-reduction-18c
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%3
	ld	(hl),a
	ld	hl,#%1 + %11
	ld	a,(hl)
	ld	hl,#%2 + %21
	adc	a, (hl)
	ld	hl,#%3 + %31
	ld	(hl),a
	ld	hl,#%1 + %12
	ld	a,(hl)
	ld	hl,#%2 + %22
	adc	a, (hl)
	ld	hl,#%3 + %32
	ld	(hl),a
	ld	hl,#%1 + %13
	ld	a,(hl)
	ld	hl,#%2 + %23
	adc	a, (hl)
	ld	hl,#%3 + %33
	ld	(hl),a
	ld	hl,#%1 + %14
	ld	a,(hl)
	ld	hl,#%2 + %24
	adc	a, (hl)
	ld	hl,#%3 + %34
	ld	(hl),a
	ld	hl,#%1 + %15
	ld	a,(hl)
	ld	hl,#%2 + %25
	adc	a, (hl)
	ld	hl,#%3 + %35
	ld	(hl),a
	ld	hl,#%1 + %16
	ld	a,(hl)
	ld	hl,#%2 + %26
	adc	a, (hl)
	ld	hl,#%3 + %36
	ld	(hl),a
	ld	hl,#%1 + %17
	ld	a,(hl)
	ld	hl,#%2 + %27
	adc	a, (hl)
	ld	hl,#%3 + %37
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_add_de_bc_hl
	pop	de
	pop	bc
	ld	hl,#%3 + %37
	; peephole z88dk-code-reduction-19a
}

replace restart {
	push	%4
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_add_de_bc_hl
	pop	%4
} by {
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_add_de_bc_hl
	; peephole z88dk-code-reduction-19b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_add_de_bc_hl
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_add_de_bc_hl
	pop	%5
	; peephole z88dk-code-reduction-19c
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	hl,#%2
	sub	a, (hl)
	ld	hl,#%3
	ld	(hl),a
	ld	hl,#%1 + %11
	ld	a,(hl)
	ld	hl,#%2 + %21
	sbc	a, (hl)
	ld	hl,#%3 + %31
	ld	(hl),a
	ld	hl,#%1 + %12
	ld	a,(hl)
	ld	hl,#%2 + %22
	sbc	a, (hl)
	ld	hl,#%3 + %32
	ld	(hl),a
	ld	hl,#%1 + %13
	ld	a,(hl)
	ld	hl,#%2 + %23
	sbc	a, (hl)
	ld	hl,#%3 + %33
	ld	(hl),a
	ld	hl,#%1 + %14
	ld	a,(hl)
	ld	hl,#%2 + %24
	sbc	a, (hl)
	ld	hl,#%3 + %34
	ld	(hl),a
	ld	hl,#%1 + %15
	ld	a,(hl)
	ld	hl,#%2 + %25
	sbc	a, (hl)
	ld	hl,#%3 + %35
	ld	(hl),a
	ld	hl,#%1 + %16
	ld	a,(hl)
	ld	hl,#%2 + %26
	sbc	a, (hl)
	ld	hl,#%3 + %36
	ld	(hl),a
	ld	hl,#%1 + %17
	ld	a,(hl)
	ld	hl,#%2 + %27
	sbc	a, (hl)
	ld	hl,#%3 + %37
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_sub_de_bc_hl
	pop	de
	pop	bc
	ld	hl,#%3 + %37
	; peephole z88dk-code-reduction-20a
}

replace restart {
	push	%4
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_sub_de_bc_hl
	pop	%4
} by {
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_sub_de_bc_hl
	; peephole z88dk-code-reduction-20b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_sub_de_bc_hl
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%1
	ld	de,#%3
	ld	hl,#%2
	call	____sdcc_ll_sub_de_bc_hl
	pop	%5
	; peephole z88dk-code-reduction-20c
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	hl,#%2
	ld	(hl),a
	ld	hl,#%1 + %11
	ld	a,(hl)
	ld	hl,#%2 + %21
	ld	(hl),a
	ld	hl,#%1 + %12
	ld	a,(hl)
	ld	hl,#%2 + %22
	ld	(hl),a
	ld	hl,#%1 + %13
	ld	a,(hl)
	ld	hl,#%2 + %23
	ld	(hl),a
	ld	hl,#%1 + %14
	ld	a,(hl)
	ld	hl,#%2 + %24
	ld	(hl),a
	ld	hl,#%1 + %15
	ld	a,(hl)
	ld	hl,#%2 + %25
	ld	(hl),a
	ld	hl,#%1 + %16
	ld	a,(hl)
	ld	hl,#%2 + %26
	ld	(hl),a
	ld	hl,#%1 + %17
	ld	a,(hl)
	ld	hl,#%2 + %27
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	de,#%2
	ld	hl,#%1
	call	____sdcc_ll_copy_src_hl_dst_de
	pop	de
	pop	bc
	ld	hl,#%2 + %27
	; peephole z88dk-code-reduction-21a
}
// notUsed('a')

replace {
	push	%4
	ld	de,#%2
	ld	hl,#%1
	call	____sdcc_ll_copy_src_hl_dst_de
	pop	%4
} by {
	ld	de,#%2
	ld	hl,#%1
	call	____sdcc_ll_copy_src_hl_dst_de
	; peephole z88dk-code-reduction-21b
} if notUsed(%4)

replace {
	push	%4
	push	%5
	ld	de,#%2
	ld	hl,#%1
	call	____sdcc_ll_copy_src_hl_dst_de
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,#%2
	ld	hl,#%1
	call	____sdcc_ll_copy_src_hl_dst_de
	pop	%5
	; peephole z88dk-code-reduction-21c
} if notUsed(%4)

replace restart {
	inc	b
	jp	%1
%2:
	ld	hl,#%3 + %4
	sra	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
%1:
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,b
	ld	bc,#%3+%4 - 7
	call	____sdcc_ll_asr_mbc_a
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-reduction-22a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%2:
	ld	hl,#%3 + %4
	sra	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,%1
	ld	bc,#%3+%4 - 7
	call	____sdcc_ll_asr_mbc_a
	pop	de
	pop	bc
	ld	b,0
	ld	hl,#%3 + %4-7
	; peephole z88dk-code-reduction-22a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_asr_mbc_a
	pop	%4
} by {
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_asr_mbc_a
	; peephole z88dk-code-reduction-22b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_asr_mbc_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_asr_mbc_a
	pop	%5
	; peephole z88dk-code-reduction-22c
} if notUsed(%4)

replace restart {
	inc	b
	jp	%1
%2:
	ld	hl,#%3
	sla	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
%1:
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,b
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-reduction-23a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%2:
	ld	hl,#%3
	sla	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	inc	hl
	rl	(hl)
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,%1
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	pop	de
	pop	bc
	ld	b,0
	ld	hl,#%3 + 7
	; peephole z88dk-code-reduction-23a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	pop	%4
} by {
	ld	a,%1
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	; peephole z88dk-code-reduction-23b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	bc,#%3
	call	____sdcc_ll_lsl_mbc_a
	pop	%5
	; peephole z88dk-code-reduction-23c
} if notUsed(%4)

replace restart {
	inc	b
	jp	%1
%2:
	ld	hl,#%3 + %4
	srl	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
%1:
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,b
	ld	bc,#%3+%4 - 7
	call	____sdcc_ll_lsr_mbc_a
	pop	de
	pop	bc
	ld	b,0
	; peephole z88dk-code-reduction-24a1
} 
//if notUsed('a')

replace restart {
	ld	b,%1
%2:
	ld	hl,#%3 + %4
	srl	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	dec	hl
	rr	(hl)
	djnz	%2
} by {
	push	bc
	push	de
	ld	a,%1
	ld	bc,#%3+%4 - 7
	call	____sdcc_ll_lsr_mbc_a
	pop	de
	pop	bc
	ld	b,0
	ld	hl,#%3 + %4-7
	; peephole z88dk-code-reduction-24a2
} 
//if notUsed('a')

replace restart {
	push	%4
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_lsr_mbc_a
	pop	%4
} by {
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_lsr_mbc_a
	; peephole z88dk-code-reduction-24b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_lsr_mbc_a
	pop	%5
	pop	%4
} by {
	push	%5
	ld	a,%1
	ld	bc,#%3 - 7
	call	____sdcc_ll_lsr_mbc_a
	pop	%5
	; peephole z88dk-code-reduction-24c
} if notUsed(%4)

replace restart {
	ld	a,%10 (ix)
	add	a, %20 (ix)
	ld	%1 (ix),a
	ld	a,%11 (ix)
	adc	a, %21 (ix)
	ld	%2 (ix),a
	ld	a,%12 (ix)
	adc	a, %22 (ix)
	ld	%3 (ix),a
	ld	a,%13 (ix)
	adc	a, %23 (ix)
	ld	%4 (ix),a
	ld	a,%14 (ix)
	adc	a, %24 (ix)
	ld	%5 (ix),a
	ld	a,%15 (ix)
	adc	a, %25 (ix)
	ld	%6 (ix),a
	ld	a,%16 (ix)
	adc	a, %26 (ix)
	ld	%7 (ix),a
	ld	a,%17 (ix)
	adc	a, %27 (ix)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	push	hl
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	hl
	pop	de
	pop	bc
	; peephole z88dk-code-reduction-25a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	; peephole z88dk-code-reduction-25b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	%5
	; peephole z88dk-code-reduction-25c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_add_hlix_deix_bcix
	pop	%6
	pop	%5
	; peephole z88dk-code-reduction-25d
} if notUsed(%4)

replace restart {
	ld	a,%10 (ix)
	sub	a, %20 (ix)
	ld	%1 (ix),a
	ld	a,%11 (ix)
	sbc	a, %21 (ix)
	ld	%2 (ix),a
	ld	a,%12 (ix)
	sbc	a, %22 (ix)
	ld	%3 (ix),a
	ld	a,%13 (ix)
	sbc	a, %23 (ix)
	ld	%4 (ix),a
	ld	a,%14 (ix)
	sbc	a, %24 (ix)
	ld	%5 (ix),a
	ld	a,%15 (ix)
	sbc	a, %25 (ix)
	ld	%6 (ix),a
	ld	a,%16 (ix)
	sbc	a, %26 (ix)
	ld	%7 (ix),a
	ld	a,%17 (ix)
	sbc	a, %27 (ix)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	push	hl
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	hl
	pop	de
	pop	bc
	; peephole z88dk-code-reduction-26a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	; peephole z88dk-code-reduction-26b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	%5
	; peephole z88dk-code-reduction-26c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	bc,#%20
	ld	de,#%10
	ld	hl,#%1
	call	____sdcc_ll_sub_hlix_deix_bcix
	pop	%6
	pop	%5
	; peephole z88dk-code-reduction-26d
} if notUsed(%4)

replace restart {
	push	af
	ld	a,%1 (ix)
	ld	%10 (ix),a
	ld	a,%2 (ix)
	ld	%11 (ix),a
	ld	a,%3 (ix)
	ld	%12 (ix),a
	ld	a,%4 (ix)
	ld	%13 (ix),a
	ld	a,%5 (ix)
	ld	%14 (ix),a
	ld	a,%6 (ix)
	ld	%15 (ix),a
	ld	a,%7 (ix)
	ld	%16 (ix),a
	ld	a,%8 (ix)
	ld	%17 (ix),a
	pop	af
} by {
	push	af
	push	bc
	push	de
	push	hl
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	hl
	pop	de
	pop	bc
	pop	af
	; peephole z88dk-code-reduction-27a
}

replace restart {
	push	%4
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%4
} by {
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	; peephole z88dk-code-reduction-27b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%5
	; peephole z88dk-code-reduction-27c
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%6
	pop	%5
	; peephole z88dk-code-reduction-27d
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	push	%6
	push	%7
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%7
	pop	%6
	pop	%5
	pop	%4
} by {
	push	%5
	push	%6
	push	%7
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_copy_src_deix_dst_hlix
	pop	%7
	pop	%6
	pop	%5
	; peephole z88dk-code-reduction-27e
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, %10 (ix)
	ld	%20 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %11 (ix)
	ld	%21 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %12 (ix)
	ld	%22 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %13 (ix)
	ld	%23 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %14 (ix)
	ld	%24 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %15 (ix)
	ld	%25 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %16 (ix)
	ld	%26 (ix),a
	inc	hl
	ld	a,(hl)
	adc	a, %17 (ix)
	ld	%27 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_add_hlix_bc_deix
	pop	de
	pop	bc
	ld	hl,#%1 + 7
	; peephole z88dk-code-reduction-28a
}
// if notUsed('a')

replace restart {
	push	%4
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_add_hlix_bc_deix
	pop	%4
} by {
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_add_hlix_bc_deix
	; peephole z88dk-code-reduction-28b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_add_hlix_bc_deix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_add_hlix_bc_deix
	pop	%5
	; peephole z88dk-code-reduction-28c
} if notUsed(%4)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, %10 (ix)
	ld	%20 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %11 (ix)
	ld	%21 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %12 (ix)
	ld	%22 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %13 (ix)
	ld	%23 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %14 (ix)
	ld	%24 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %15 (ix)
	ld	%25 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %16 (ix)
	ld	%26 (ix),a
	inc	hl
	ld	a,(hl)
	sbc	a, %17 (ix)
	ld	%27 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_sub_hlix_bc_deix
	pop	de
	pop	bc
	ld	hl,#%1 + 7
	; peephole z88dk-code-reduction-29a
}

replace restart {
	push	%4
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_sub_hlix_bc_deix
	pop	%4
} by {
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_sub_hlix_bc_deix
	; peephole z88dk-code-reduction-29b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_sub_hlix_bc_deix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%1
	ld	de,#%10
	ld	hl,#%20
	call	____sdcc_ll_sub_hlix_bc_deix
	pop	%5
	; peephole z88dk-code-reduction-29c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%20
	add	a, (hl)
	ld	%10 (ix),a
	ld	a,%2 (ix)
	inc	hl
	adc	a, (hl)
	ld	%11 (ix),a
	ld	a,%3 (ix)
	inc	hl
	adc	a, (hl)
	ld	%12 (ix),a
	ld	a,%4 (ix)
	inc	hl
	adc	a, (hl)
	ld	%13 (ix),a
	ld	a,%5 (ix)
	inc	hl
	adc	a, (hl)
	ld	%14 (ix),a
	ld	a,%6 (ix)
	inc	hl
	adc	a, (hl)
	ld	%15 (ix),a
	ld	a,%7 (ix)
	inc	hl
	adc	a, (hl)
	ld	%16 (ix),a
	ld	a,%8 (ix)
	inc	hl
	adc	a, (hl)
	ld	%17 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_hlix_deix_bc
	pop	de
	pop	bc
	ld	hl,#%20 + 7
	; peephole z88dk-code-reduction-30a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_hlix_deix_bc
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_hlix_deix_bc
	; peephole z88dk-code-reduction-30b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_hlix_deix_bc
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_hlix_deix_bc
	pop	%5
	; peephole z88dk-code-reduction-30c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%20
	sub	a, (hl)
	ld	%10 (ix),a
	ld	a,%2 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%11 (ix),a
	ld	a,%3 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%12 (ix),a
	ld	a,%4 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%13 (ix),a
	ld	a,%5 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%14 (ix),a
	ld	a,%6 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%15 (ix),a
	ld	a,%7 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%16 (ix),a
	ld	a,%8 (ix)
	inc	hl
	sbc	a, (hl)
	ld	%17 (ix),a
} by {
	push	bc
	push	de
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_hlix_deix_bc
	pop	de
	pop	bc
	ld	hl,#%20 + 7
	; peephole z88dk-code-reduction-31a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_hlix_deix_bc
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_hlix_deix_bc
	; peephole z88dk-code-reduction-31b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_hlix_deix_bc
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_hlix_deix_bc
	pop	%5
	; peephole z88dk-code-reduction-31c
} if notUsed(%4)

replace restart {
	ld	a,%10 (ix)
	add	a, %20 (ix)
	ld	hl,#%1
	ld	(hl),a
	ld	a,%11 (ix)
	adc	a, %21 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%12 (ix)
	adc	a, %22 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%13 (ix)
	adc	a, %23 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%14 (ix)
	adc	a, %24 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%15 (ix)
	adc	a, %25 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%16 (ix)
	adc	a, %26 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%17 (ix)
	adc	a, %27 (ix)
	inc	hl
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_de_hlix_bcix
	pop	de
	pop	bc
	ld	hl,#%1 + 7
	; peephole z88dk-code-reduction-32a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_de_hlix_bcix
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_de_hlix_bcix
	; peephole z88dk-code-reduction-32b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_de_hlix_bcix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_add_de_hlix_bcix
	pop	%5
	; peephole z88dk-code-reduction-32c
} if notUsed(%4)

replace restart {
	ld	a,%10 (ix)
	sub	a, %20 (ix)
	ld	hl,#%1
	ld	(hl),a
	ld	a,%11 (ix)
	sbc	a, %21 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%12 (ix)
	sbc	a, %22 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%13 (ix)
	sbc	a, %23 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%14 (ix)
	sbc	a, %24 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%15 (ix)
	sbc	a, %25 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%16 (ix)
	sbc	a, %26 (ix)
	inc	hl
	ld	(hl),a
	ld	a,%17 (ix)
	sbc	a, %27 (ix)
	inc	hl
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_de_hlix_bcix
	pop	de
	pop	bc
	ld	hl,#%1 + 7
	; peephole z88dk-code-reduction-33a
}

replace restart {
	push	%4
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_de_hlix_bcix
	pop	%4
} by {
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_de_hlix_bcix
	; peephole z88dk-code-reduction-33b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_de_hlix_bcix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%20
	ld	de,#%1
	ld	hl,#%10
	call	____sdcc_ll_sub_de_hlix_bcix
	pop	%5
	; peephole z88dk-code-reduction-33c
} if notUsed(%4)

replace restart {
	ld	hl,#%10
	ld	a,(hl)
	add	a, %1 (ix)
	ld	hl,#%20
	ld	(hl),a
	ld	hl,#%10 + %11
	ld	a,(hl)
	adc	a, %2 (ix)
	ld	hl,#%20 + %21
	ld	(hl),a
	ld	hl,#%10 + %12
	ld	a,(hl)
	adc	a, %3 (ix)
	ld	hl,#%20 + %22
	ld	(hl),a
	ld	hl,#%10 + %13
	ld	a,(hl)
	adc	a, %4 (ix)
	ld	hl,#%20 + %23
	ld	(hl),a
	ld	hl,#%10 + %14
	ld	a,(hl)
	adc	a, %5 (ix)
	ld	hl,#%20 + %24
	ld	(hl),a
	ld	hl,#%10 + %15
	ld	a,(hl)
	adc	a, %6 (ix)
	ld	hl,#%20 + %25
	ld	(hl),a
	ld	hl,#%10 + %16
	ld	a,(hl)
	adc	a, %7 (ix)
	ld	hl,#%20 + %26
	ld	(hl),a
	ld	hl,#%10 + %17
	ld	a,(hl)
	adc	a, %8 (ix)
	ld	hl,#%20 + %27
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_bc_hlix
	pop	de
	pop	bc
	ld	hl,#%20 + %27
	; peephole z88dk-code-reduction-34a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_bc_hlix
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_bc_hlix
	; peephole z88dk-code-reduction-34b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_bc_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_bc_hlix
	pop	%5
	; peephole z88dk-code-reduction-34c
} if notUsed(%4)

replace restart {
	ld	hl,#%10
	ld	a,(hl)
	sub	a, %1 (ix)
	ld	hl,#%20
	ld	(hl),a
	ld	hl,#%10 + %11
	ld	a,(hl)
	sbc	a, %2 (ix)
	ld	hl,#%20 + %21
	ld	(hl),a
	ld	hl,#%10 + %12
	ld	a,(hl)
	sbc	a, %3 (ix)
	ld	hl,#%20 + %22
	ld	(hl),a
	ld	hl,#%10 + %13
	ld	a,(hl)
	sbc	a, %4 (ix)
	ld	hl,#%20 + %23
	ld	(hl),a
	ld	hl,#%10 + %14
	ld	a,(hl)
	sbc	a, %5 (ix)
	ld	hl,#%20 + %24
	ld	(hl),a
	ld	hl,#%10 + %15
	ld	a,(hl)
	sbc	a, %6 (ix)
	ld	hl,#%20 + %25
	ld	(hl),a
	ld	hl,#%10 + %16
	ld	a,(hl)
	sbc	a, %7 (ix)
	ld	hl,#%20 + %26
	ld	(hl),a
	ld	hl,#%10 + %17
	ld	a,(hl)
	sbc	a, %8 (ix)
	ld	hl,#%20 + %27
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_bc_hlix
	pop	de
	pop	bc
	ld	hl,#%20 + %27
	; peephole z88dk-code-reduction-35a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_bc_hlix
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_bc_hlix
	; peephole z88dk-code-reduction-35b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_bc_hlix
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_bc_hlix
	pop	%5
	; peephole z88dk-code-reduction-35c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%10
	add	a, (hl)
	ld	hl,#%20
	ld	(hl),a
	ld	a,%2 (ix)
	ld	hl,#%10 + %11
	adc	a, (hl)
	ld	hl,#%20 + %21
	ld	(hl),a
	ld	a,%3 (ix)
	ld	hl,#%10 + %12
	adc	a, (hl)
	ld	hl,#%20 + %22
	ld	(hl),a
	ld	a,%4 (ix)
	ld	hl,#%10 + %13
	adc	a, (hl)
	ld	hl,#%20 + %23
	ld	(hl),a
	ld	a,%5 (ix)
	ld	hl,#%10 + %14
	adc	a, (hl)
	ld	hl,#%20 + %24
	ld	(hl),a
	ld	a,%6 (ix)
	ld	hl,#%10 + %15
	adc	a, (hl)
	ld	hl,#%20 + %25
	ld	(hl),a
	ld	a,%7 (ix)
	ld	hl,#%10 + %16
	adc	a, (hl)
	ld	hl,#%20 + %26
	ld	(hl),a
	ld	a,%8 (ix)
	ld	hl,#%10 + %17
	adc	a, (hl)
	ld	hl,#%20 + %27
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_hlix_bc
	pop	de
	pop	bc
	ld	hl,#%20 + %27
	; peephole z88dk-code-reduction-36a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_hlix_bc
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_hlix_bc
	; peephole z88dk-code-reduction-36b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_hlix_bc
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_add_de_hlix_bc
	pop	%5
	; peephole z88dk-code-reduction-36c
} if notUsed(%4)

replace restart {
	ld	a,%1 (ix)
	ld	hl,#%10
	sub	a, (hl)
	ld	hl,#%20
	ld	(hl),a
	ld	a,%2 (ix)
	ld	hl,#%10 + %11
	sbc	a, (hl)
	ld	hl,#%20 + %21
	ld	(hl),a
	ld	a,%3 (ix)
	ld	hl,#%10 + %12
	sbc	a, (hl)
	ld	hl,#%20 + %22
	ld	(hl),a
	ld	a,%4 (ix)
	ld	hl,#%10 + %13
	sbc	a, (hl)
	ld	hl,#%20 + %23
	ld	(hl),a
	ld	a,%5 (ix)
	ld	hl,#%10 + %14
	sbc	a, (hl)
	ld	hl,#%20 + %24
	ld	(hl),a
	ld	a,%6 (ix)
	ld	hl,#%10 + %15
	sbc	a, (hl)
	ld	hl,#%20 + %25
	ld	(hl),a
	ld	a,%7 (ix)
	ld	hl,#%10 + %16
	sbc	a, (hl)
	ld	hl,#%20 + %26
	ld	(hl),a
	ld	a,%8 (ix)
	ld	hl,#%10 + %17
	sbc	a, (hl)
	ld	hl,#%20 + %27
	ld	(hl),a
} by {
	push	bc
	push	de
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_hlix_bc
	pop	de
	pop	bc
	ld	hl,#%20 + %27
	; peephole z88dk-code-reduction-37a
}

replace restart {
	push	%4
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_hlix_bc
	pop	%4
} by {
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_hlix_bc
	; peephole z88dk-code-reduction-37b
} if notUsed(%4)

replace restart {
	push	%4
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_hlix_bc
	pop	%5
	pop	%4
} by {
	push	%5
	ld	bc,#%10
	ld	de,#%20
	ld	hl,#%1
	call	____sdcc_ll_sub_de_hlix_bc
	pop	%5
	; peephole z88dk-code-reduction-37c
} if notUsed(%4)

replace restart {
	call	____sdcc_lib_setmem_hl - 4-2-2-2-2-2-2-2-2-2-2-2-2-2-2-%1
} by {
	call	____sdcc_lib_setmem_hl - 28
	call	____sdcc_lib_setmem_hl - 4-%1
	; peephole z88dk-code-reduction-38a
}

replace restart {
	xor	a,a
	ld	(hl),a
	inc	hl
	ld	(hl),a
	inc	hl
} by {
	xor	a,a
	call	____sdcc_lib_setmem_hl - 4
	; peephole z88dk-code-reduction-38b
}

replace restart {
	call	____sdcc_lib_setmem_hl - %1
	ld	(hl),a
	inc	hl
} by {
	call	____sdcc_lib_setmem_hl - %1-2
	; peephole z88dk-code-reduction-38c
}

replace restart {
	call	____sdcc_lib_setmem_hl - %1
	ld	(hl),a
} by {
	call	____sdcc_lib_setmem_hl - %1-2
	; peephole z88dk-code-reduction-38d
} if notUsed('hl')

replace restart {
	xor	a,a
	call	____sdcc_lib_setmem_hl - %1
	ld	(hl),#0x00
	inc	hl
} by {
	xor	a,a
	call	____sdcc_lib_setmem_hl - %1-2
	; peephole z88dk-code-reduction-38e
}

replace restart {
	xor	a,a
	call	____sdcc_lib_setmem_hl - %1
	ld	(hl),#0x00
} by {
	xor	a,a
	call	____sdcc_lib_setmem_hl - %1-2
	; peephole z88dk-code-reduction-38f
} if notUsed('hl')


barrier


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK CODE SIZE REDUCTION FOR LONG AND FLOAT
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	call	____sdcc_load_debc_mhl
	; peephole z88dk-code-reduction-300a
}

replace restart {
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	inc	hl
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
} by {
	call	____sdcc_load_hlde_mhl
	; peephole z88dk-code-reduction-301a
}

replace restart {
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
} by {
	ld	de,#%1
	call	____sdcc_4_copy_src_mhl_dst_deix
	; peephole z88dk-code-reduction-302a
} if notUsed('de')

replace restart {
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
} by {
	ld	bc,#%1
	call	____sdcc_4_copy_src_mhl_dst_bcix
	; peephole z88dk-code-reduction-303a
} if notUsed('bc')

replace restart {
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
} by {
	push	de
	ld	de,#%1
	call	____sdcc_4_copy_src_mhl_dst_deix
	pop	de
	; peephole z88dk-code-reduction-304a
}

replace restart {
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	call	____sdcc_store_debc_mhl
	; peephole z88dk-code-reduction-305a
}

replace restart {
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
} by {
	call	____sdcc_4_copy_src_mhl_dst_mbc
	; peephole z88dk-code-reduction-306a
}

replace restart {
	ld	hl,(#%1 + 2)
	push	hl
	ld	hl,(#%1)
	push	hl
} by {
	ld	hl,#%1
	call	____sdcc_4_push_mhl
	; peephole z88dk-code-reduction-307a
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	call	____sdcc_store_debc_mhl
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	; peephole z88dk-code-reduction-308a
} if notUsed('hl'), notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	call	____sdcc_store_debc_mhl
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	hl,#%1 + 3
	; peephole z88dk-code-reduction-308b
} if notUsed('bc')

replace restart {
	ldi
	ldi
	ldi
	ld	a,(hl)
	ld	(de),a
} by {
	call	____sdcc_4_ldi_nosave_bc
	; peephole z88dk-code-reduction-309a
}

replace restart {
	ld	bc,#0x0004
	ldir
} by {
	call	____sdcc_4_ldi_nosave_bc
	; peephole z88dk-code-reduction-309c
} if notUsed('a'), notUsed('bc'), notUsed('de'), notUsed('hl')

replace restart {
	ld	bc,#4
	ldir
} by {
	call	____sdcc_4_ldi_nosave_bc
	; peephole z88dk-code-reduction-309d
} if notUsed('a'), notUsed('bc'), notUsed('de'), notUsed('hl')

replace restart {
	call	____sdcc_4_ldi_save_bc
} by {
	call	____sdcc_4_ldi_nosave_bc
	; peephole z88dk-code-reduction-309e
} if notUsed('bc')

replace restart {
	call	____sdcc_4_ldi_save_bc
	pop	bc
} by {
	call	____sdcc_4_ldi_nosave_bc
	pop	bc
	; peephole z88dk-code-reduction-309f2
}

replace restart {
	push	bc
	ex	de,hl
	ld	hl,#%1
	add	hl,sp
	call	____sdcc_4_ldi_nosave_bc
	pop	bc
} by {
	ex	de,hl
	ld	hl,#%1-2
	add	hl,sp
	call	____sdcc_4_ldi_nosave_bc
	; peephole z88dk-code-reduction-309f3
} if notUsed('bc')

replace restart {
	push	bc
	ex	de,hl
	ld	hl,#%1
	add	hl,sp
	ex	de,hl
	call	____sdcc_4_ldi_nosave_bc
	pop	bc
} by {
	ex	de,hl
	ld	hl,#%1-2
	add	hl,sp
	ex	de,hl
	call	____sdcc_4_ldi_save_bc
	; peephole z88dk-code-reduction-309f4
}

replace restart {
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	push	hl
	ld	l,%3 (ix)
	ld	h,%4 (ix)
	push	hl
} by {
	ld	hl,#%3
	call	____sdcc_4_push_hlix
	; peephole z88dk-code-reduction-310
} if notUsed('hl'), inSequence('1' %3 %4 %1 %2), notUsed('a')

replace restart {
	ld	%1 (ix),l
	ld	%2 (ix),h
	ld	%3 (ix),e
	ld	%4 (ix),d
} by {
	ld	bc,#%4
	call	____sdcc_store_dehl_bcix
	; peephole z88dk-code-reduction-311a
} if notUsed('bc'), inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	%1 (ix),l
	ld	%2 (ix),h
	ld	%3 (ix),e
	ld	%4 (ix),d
} by {
	push	bc
	ld	bc,#%4
	call	____sdcc_store_dehl_bcix
	pop	bc
	; peephole z88dk-code-reduction-311b
} if inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),h
	ld	%4 (ix),l
} by {
	ld	bc,#%1
	call	____sdcc_store_dehl_bcix
	; peephole z88dk-code-reduction-312a
} if notUsed('bc'), inSequence('1' %4 %3 %2 %1)

replace restart {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),h
	ld	%4 (ix),l
} by {
	push	bc
	ld	bc,#%1
	call	____sdcc_store_dehl_bcix
	pop	bc
	; peephole z88dk-code-reduction-312b
} if notUsed('bc'), inSequence('1' %4 %3 %2 %1)

replace restart {
	ld	c,%1 (ix)
	ld	b,%2 (ix)
	ld	e,%3 (ix)
	ld	d,%4 (ix)
} by {
	ld	de,#%1
	call	____sdcc_load_debc_deix
	; peephole z88dk-code-reduction-313
} if inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	ld	e,%3 (ix)
	ld	d,%4 (ix)
} by {
	ld	de,#%4
	call	____sdcc_load_dehl_deix
	; peephole z88dk-code-reduction-314
} if notUsed('a'), inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	%1 (ix),c
	ld	%2 (ix),b
	ld	%3 (ix),e
	ld	%4 (ix),d
} by {
	ld	hl,#%4
	call	____sdcc_store_debc_hlix
	; peephole z88dk-code-reduction-315a
} if notUsed('hl'), inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	%1 (ix),c
	ld	%2 (ix),b
	ld	%3 (ix),e
	ld	%4 (ix),d
} by {
	push	hl
	ld	hl,#%4
	call	____sdcc_store_debc_hlix
	pop	hl
	; peephole z88dk-code-reduction-315b
} if inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	a,%1 (ix)
	ld	%5 (ix),a
	ld	a,%2 (ix)
	ld	%6 (ix),a
	ld	a,%3 (ix)
	ld	%7 (ix),a
	ld	a,%4 (ix)
	ld	%8 (ix),a
} by {
	push	bc
	push	de
	push	hl
	ld	de,#%5
	ld	hl,#(%1-%5)
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	hl
	pop	de
	pop	bc
	; peephole z88dk-code-reduction-316a
} if inSequence('1' %1 %2 %3 %4), inSequence('1' %5 %6 %7 %8)

replace restart {
	push	%1
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	%1
} by {
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	; peephole z88dk-code-reduction-316b
} if notUsed(%1)

replace restart {
	push	%4
	push	%1
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	%1
	pop	%4
} by {
	push	%1
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	%1
	; peephole z88dk-code-reduction-316c
} if notUsed(%4)

replace restart {
	push	%5
	push	%4
	push	%1
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	%1
	pop	%4
	pop	%5
} by {
	push	%4
	push	%1
	ld	de,%2
	ld	hl,%3
	call	____sdcc_4_copy_srcd_hlix_dst_deix
	pop	%1
	pop	%4
	; peephole z88dk-code-reduction-316d
} if notUsed(%5)

replace restart {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	%6 (ix),a
	ld	a,(%1 + 1)
	inc	hl
	%10	a,(hl)
	ld	%7 (ix),a
	ld	a,(%1 + 2)
	inc	hl
	%10	a,(hl)
	ld	%8 (ix),a
	ld	a,(%1 + 3)
	inc	hl
	%10	a,(hl)
	ld	%9 (ix),a
} by {
	ld	hl,%2
	push	bc
	push	de
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_%10_src_mbc_mhl_dst_deix
	pop	de
	pop	bc
	; peephole z88dk-code-reduction-317a1
} if same(%10 'and' 'or' 'xor'), inSequence('1' %6 %7 %8 %9)

replace restart {
	push	%3
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_and_src_mbc_mhl_dst_deix
	pop	%3
} by {
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_and_src_mbc_mhl_dst_deix
	; peephole z88dk-code-reduction-317a2
} if notUsed(%3)

replace restart {
	push	%3
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_and_src_mbc_mhl_dst_deix
	pop	%4
	pop	%3
} by {
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_and_src_mbc_mhl_dst_deix
	pop	%4
	; peephole z88dk-code-reduction-317a3
} if notUsed(%3)

replace restart {
	push	%3
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_or_src_mbc_mhl_dst_deix
	pop	%3
} by {
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_or_src_mbc_mhl_dst_deix
	; peephole z88dk-code-reduction-317a4
} if notUsed(%3)

replace restart {
	push	%3
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_or_src_mbc_mhl_dst_deix
	pop	%4
	pop	%3
} by {
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_or_src_mbc_mhl_dst_deix
	pop	%4
	; peephole z88dk-code-reduction-317a5
} if notUsed(%3)

replace restart {
	push	%3
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_xor_src_mbc_mhl_dst_deix
	pop	%3
} by {
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_xor_src_mbc_mhl_dst_deix
	; peephole z88dk-code-reduction-317a6
} if notUsed(%3)

replace restart {
	push	%3
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_xor_src_mbc_mhl_dst_deix
	pop	%4
	pop	%3
} by {
	push	%4
	ld	bc,%1
	ld	de,%6
	call	____sdcc_4_xor_src_mbc_mhl_dst_deix
	pop	%4
	; peephole z88dk-code-reduction-317a7
} if notUsed(%3)

replace restart {
	ld	a,%1 (ix)
	%10	a,l
	ld	%1 (ix),a
	ld	a,%2 (ix)
	%10	a,h
	ld	%2 (ix),a
	ld	a,%3 (ix)
	%10	a,e
	ld	%3 (ix),a
	ld	a,%4 (ix)
	%10	a,d
	ld	%4 (ix),a
} by {
	push	bc
	ld	bc,%1
	call	____sdcc_4_%10_src_dehl_dst_bcix
	pop	bc
	; peephole z88dk-code-reduction-317b1
} if same(%10 'and' 'or' 'xor'), inSequence('1' %1 %2 %3 %4)

replace restart {
	push	bc
	ld	bc,%1
	call	____sdcc_4_or_src_dehl_dst_bcix
	pop	bc
} by {
	ld	bc,%1
	call	____sdcc_4_or_src_dehl_dst_bcix
	; peephole z88dk-code-reduction-317b2
} if notUsed('bc')

replace restart {
	push	bc
	ld	bc,%1
	call	____sdcc_4_xor_src_dehl_dst_bcix
	pop	bc
} by {
	ld	bc,%1
	call	____sdcc_4_xor_src_dehl_dst_bcix
	; peephole z88dk-code-reduction-317b3
} if notUsed('bc')

replace restart {
	push	bc
	ld	bc,%1
	call	____sdcc_4_and_src_dehl_dst_bcix
	pop	bc
} by {
	ld	bc,%1
	call	____sdcc_4_and_src_dehl_dst_bcix
	; peephole z88dk-code-reduction-317b4
} if notUsed('bc')

replace restart {
	ld	a,%1 (ix)
	%10	a,e
	ld	%1 (ix),a
	ld	a,%2 (ix)
	%10	a,d
	ld	%2 (ix),a
	ld	a,%3 (ix)
	%10	a,l
	ld	%3 (ix),a
	ld	a,%4 (ix)
	%10	a,h
	ld	%4 (ix),a
} by {
	ex	de,hl
	push	bc
	ld	bc,%1
	call	____sdcc_4_%10_src_dehl_dst_bcix
	pop	bc
	ex	de,hl
	; peephole z88dk-code-reduction-317b5
} if same(%10 'and' 'or' 'xor'), inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	c,a
	ld	a,(%1 + 1)
	inc	hl
	%10	a,(hl)
	ld	b,a
	ld	a,(%1 + 2)
	inc	hl
	%10	a,(hl)
	ld	e,a
	ld	a,(%1 + 3)
	inc	hl
	%10	a,(hl)
	ld	d,a
} by {
	ld	bc,%1
	ld	hl,%2
	call	____sdcc_4_%10_src_mbc_mhl_dst_debc
	; peephole z88dk-code-reduction-318a
} if same(%10 'and' 'or' 'xor')

replace restart {
	ld	a,(hl)
	cpl
	ld	c,a
	inc	hl
	ld	a,(hl)
	cpl
	ld	b,a
	inc	hl
	ld	a,(hl)
	cpl
	ld	e,a
	inc	hl
	ld	a,(hl)
	cpl
	ld	d,a
} by {
	call	____sdcc_4_cpl_src_mhl_dst_debc
	; peephole z88dk-code-reduction-319
}

replace restart {
	ld	hl,(%1)
	ld	a,c
	%10	a,l
	ld	c,a
	ld	a,b
	%10	a,h
	ld	b,a
	ld	hl,(%1 + 2)
	ld	a,e
	%10	a,l
	ld	e,a
	ld	a,d
	%10	a,h
	ld	d,a
} by {
	ld	hl,%1
	call	____sdcc_4_%10_src_debc_mhl_dst_debc
	ld	hl,(%1 + 2)
	; peephole z88dk-code-reduction-319
} if same(%10 'and' 'or' 'xor')

replace restart {
	ld	a,c
	%10	a,%1 (ix)
	ld	c,a
	ld	a,b
	%10	a,%2 (ix)
	ld	b,a
	ld	a,e
	%10	a,%3 (ix)
	ld	e,a
	ld	a,d
	%10	a,%4 (ix)
	ld	d,a
} by {
	push	hl
	ld	hl,%1
	call	____sdcc_4_%10_src_debc_hlix_dst_debc
	pop	hl
	; peephole z88dk-code-reduction-320a
} if same(%10 'and' 'or' 'xor'), inSequence('1' %1 %2 %3 %4)

replace restart {
	push	%2
	ld	hl,%1
	call	____sdcc_4_and_src_debc_hlix_dst_debc
	pop	%2
} by {
	ld	hl,%1
	call	____sdcc_4_and_src_debc_hlix_dst_debc
	; peephole z88dk-code-reduction-320b
} if notUsed(%2)

replace restart {
	push	%2
	ld	hl,%1
	call	____sdcc_4_or_src_debc_hlix_dst_debc
	pop	%2
} by {
	ld	hl,%1
	call	____sdcc_4_or_src_debc_hlix_dst_debc
	; peephole z88dk-code-reduction-320c
} if notUsed(%2)

replace restart {
	push	%2
	ld	hl,%1
	call	____sdcc_4_xor_src_debc_hlix_dst_debc
	pop	%2
} by {
	ld	hl,%1
	call	____sdcc_4_xor_src_debc_hlix_dst_debc
	; peephole z88dk-code-reduction-320d
} if notUsed(%2)

replace restart {
	ld	a,%1 (ix)
	%10	a,c
	ld	c,a
	ld	a,%2 (ix)
	%10	a,b
	ld	b,a
	ld	a,%3 (ix)
	%10	a,e
	ld	e,a
	ld	a,%4 (ix)
	%10	a,d
	ld	d,a
} by {
	push	hl
	ld	hl,%1
	call	____sdcc_4_%10_src_debc_hlix_dst_debc
	pop	hl
	; peephole z88dk-code-reduction-320e
} if same(%10 'and' 'or' 'xor'), inSequence('1' %1 %2 %3 %4)

replace restart {
	ld	hl,#%1
	call	____sdcc_load_debc_mhl
} by {
	ld	bc,(#%1)
	ld	de,(#%1 + 2)
	; peephole z88dk-code-reduction-320f
} if notUsed('hl')





barrier


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK CODE SIZE REDUCTION FOR INT
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
} by {
	ld	de,#%1
	call	____sdcc_2_copy_src_mhl_dst_deix
	; peephole z88dk-code-reduction-500a
} if notUsed('de')

replace restart {
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
} by {
	ld	bc,#%1
	call	____sdcc_2_copy_src_mhl_dst_bcix
	; peephole z88dk-code-reduction-500b
} if notUsed('bc')


barrier


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK INTRINSICS
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	call	_SECTION_SIZE_CODE
} by {
	nop	; EXTERN __CODE_END_tail
	nop	; EXTERN __CODE_head
	ld	hl,#(__CODE_END_tail - __CODE_head)
	; peephole z88dk-intrinsic-section-size
}

replace restart {
	call	_SECTION_SIZE_DATA
} by {
	nop	; EXTERN __DATA_END_tail
	nop	; EXTERN __DATA_head
	ld	hl,#(__DATA_END_tail - __DATA_head)
	; peephole z88dk-intrinsic-section-size
}

replace restart {
	call	_SECTION_SIZE_BSS
} by {
	nop	; EXTERN __BSS_UNINITIALIZED_head
	nop	; EXTERN __BSS_head
	ld	hl,#(__BSS_UNINITIALIZED_head - __BSS_head)
	; peephole z88dk-intrinsic-section-size
}

replace restart {
	call	_SECTION_ORG_%1
} by {
	nop	; EXTERN __%1_head
	ld	hl,#__%1_head
	; peephole z88dk-intrinsic-section-org
}

replace restart {
	call	_SECTION_END_%1
} by {
	nop	; EXTERN __%1_tail
	ld	hl,#__%1_tail
	; peephole z88dk-intrinsic-section-end
}

replace restart {
	call	_SECTION_SIZE_%1
} by {
	nop	; EXTERN __%1_size
	ld	hl,#__%1_size
	; peephole z88dk-intrinsic-section-size
}

replace restart {
	call	_intrinsic_outi_num_256
} by {
	call	____sdcc_outi_256
	; peephole z88dk-intrinsic-outi-num-256
}

replace restart {
	jp	_intrinsic_outi_num_256
} by {
	jp	____sdcc_outi_256
	; peephole z88dk-intrinsic-outi-num-256
}

replace restart {
	call	_intrinsic_outi_num_128
} by {
	call	____sdcc_outi_128
	; peephole z88dk-intrinsic-outi-num-128
}

replace restart {
	jp	_intrinsic_outi_num_128
} by {
	jp	____sdcc_outi_128
	; peephole z88dk-intrinsic-outi-num-128
}

barrier

replace restart {
	call	_intrinsic_outi_num_%1
} by {
	call	____sdcc_outi-(%1*2)
	; peephole z88dk-intrinsic-outi-num-%1
}

replace restart {
	jp	_intrinsic_outi_num_%1
} by {
	jp	____sdcc_outi-(%1*2)
	; peephole z88dk-intrinsic-outi-num-%1
}

replace restart {
	call	_intrinsic_outi_port_%1
} by {
	ld	c,#%1
	; peephole z88dk-intrinsic-outi-port-%1
}

replace restart {
	call	_intrinsic_outi
} by {
	; peephole z88dk-intrinsic-outi
}

barrier

replace restart {
	call	_intrinsic_ini_num_512
} by {
	call	____sdcc_ini_512
	; peephole z88dk-intrinsic-ini-num-512
}

replace restart {
	jp	_intrinsic_ini_num_512
} by {
	jp	____sdcc_ini_512
	; peephole z88dk-intrinsic-ini-num-512
}

replace restart {
	call	_intrinsic_ini_num_256
} by {
	call	____sdcc_ini_256
	; peephole z88dk-intrinsic-ini-num-256
}

replace restart {
	jp	_intrinsic_ini_num_256
} by {
	jp	____sdcc_ini_256
	; peephole z88dk-intrinsic-ini-num-256
}

replace restart {
	call	_intrinsic_ini_num_128
} by {
	call	____sdcc_ini_128
	; peephole z88dk-intrinsic-ini-num-128
}

replace restart {
	jp	_intrinsic_ini_num_128
} by {
	jp	____sdcc_ini_128
	; peephole z88dk-intrinsic-ini-num-128
}

barrier

replace restart {
	call	_intrinsic_ini_num_%1
} by {
	call	____sdcc_ini-(%1*2)
	; peephole z88dk-intrinsic-ini-num-%1
}

replace restart {
	jp	_intrinsic_ini_num_%1
} by {
	jp	____sdcc_ini-(%1*2)
	; peephole z88dk-intrinsic-ini-num-%1
}

replace restart {
	call	_intrinsic_ini_port_%1
} by {
	ld	c,#%1
	; peephole z88dk-intrinsic-ini-port-%1
}

replace restart {
	call	_intrinsic_ini
} by {
	; peephole z88dk-intrinsic-ini
}

barrier

replace restart {
	call	_intrinsic_ldi_num_256
} by {
	call	____sdcc_ldi_256
	; peephole z88dk-intrinsic-ldi-num-256
}

replace restart {
	jp	_intrinsic_ldi_num_256
} by {
	jp	____sdcc_ldi_256
	; peephole z88dk-intrinsic-ldi-num-256
}

replace restart {
	call	_intrinsic_ldi_num_128
} by {
	call	____sdcc_ldi_128
	; peephole z88dk-intrinsic-ldi-num-128
}

replace restart {
	jp	_intrinsic_ldi_num_128
} by {
	jp	____sdcc_ldi_128
	; peephole z88dk-intrinsic-ldi-num-128
}

barrier

replace restart {
	call	_intrinsic_ldi_num_%1
} by {
	call	____sdcc_ldi-(%1*2)
	; peephole z88dk-intrinsic-ldi-num-%1
}

replace restart {
	jp	_intrinsic_ldi_num_%1
} by {
	jp	____sdcc_ldi-(%1*2)
	; peephole z88dk-intrinsic-ldi-num-%1
}

replace restart {
	call	_intrinsic_ldi
} by {
	pop	de
	pop	hl
	; peephole z88dk-intrinsic-ldi
}

replace restart {
	call	____sdcc_ldi%1
	ret
} by {
	jp	____sdcc_ldi%1
	; peephole z88dk-intrinsic-ldi-tailcall
}

barrier

replace restart {
	call	_intrinsic_slp
} by {
	slp
	; peephole z88dk-intrinsic-slp
}

replace restart {
	jp	_intrinsic_slp
} by {
	slp
	ret
	; peephole z88dk-intrinsic-slp
}

replace restart {
	call	_intrinsic_stub
} by {
	; peephole z88dk-intrinsic-stub
}

replace restart {
	jp	_intrinsic_stub
} by {
	ret
	; peephole z88dk-intrinsic-stub
}

replace restart {
	call	_intrinsic_di
} by {
	di
	; peephole z88dk-intrinsic-di
}

replace restart {
	jp	_intrinsic_di
} by {
	di
	ret
	; peephole z88dk-intrinsic-di
}

replace restart {
	call	_intrinsic_ei
} by {
	ei
	; peephole z88dk-intrinsic-ei
}

replace restart {
	jp	_intrinsic_ei
} by {
	ei
	ret
	; peephole z88dk-intrinsic-ei
}

replace restart {
	call	_intrinsic_halt
} by {
	halt
	; peephole z88dk-intrinsic-halt
}

replace restart {
	jp	_intrinsic_halt
} by {
	halt
	ret
	; peephole z88dk-intrinsic-halt
}

replace restart {
	call	_intrinsic_label_%1
} by {
%1::
	; peephole z88dk-intrinsic-label %1
}

replace restart {
	jp	_intrinsic_label_%1
} by {
%1::
	ret
	; peephole z88dk-intrinsic-label %1
}

replace restart {
	call	_intrinsic_load16_%1
} by {
	ld	hl,(#%1)
	; peephole z88dk-intrinsic-load (%1)
}

replace restart {
	jp	_intrinsic_load16_%1
} by {
	ld	hl,(#%1)
	ret
	; peephole z88dk-intrinsic-load (%1)
}

replace restart {
	call	_intrinsic_store16_address_%1
	call	_intrinsic_store16_value_%2
} by {
	ld	hl,#%2
	ld	(#%1),hl
	; peephole z88dk-intrinsic-store (%1),%2
} 

replace restart {
	call	_intrinsic_reti
} by {
	reti
	; peephole z88dk-intrinsic-reti
}

replace restart {
	jp	_intrinsic_reti
} by {
	reti
	; peephole z88dk-intrinsic-reti
}

replace restart {
	call	_intrinsic_retn
} by {
	retn
	; peephole z88dk-intrinsic-retn
}

replace restart {
	jp	_intrinsic_retn
} by {
	retn
	; peephole z88dk-intrinsic-retn
}

replace restart {
	call	_intrinsic_im_0
} by {
	im	0
	; peephole z88dk-intrinsic-im-0
}

replace restart {
	jp	_intrinsic_im_0
} by {
	im	0
	ret
	; peephole z88dk-intrinsic-im-0
}

replace restart {
	call	_intrinsic_im_1
} by {
	im	1
	; peephole z88dk-intrinsic-im-1
}

replace restart {
	jp	_intrinsic_im_1
} by {
	im	1
	ret
	; peephole z88dk-intrinsic-im-1
}

replace restart {
	call	_intrinsic_im_2
} by {
	im	2
	; peephole z88dk-intrinsic-im-2
}

replace restart {
	jp	_intrinsic_im_2
} by {
	im	2
	ret
	; peephole z88dk-intrinsic-im-2
}

replace restart {
	call	_intrinsic_nop
} by {
	nop
	; peephole z88dk-intrinsic-nop
}

replace restart {
	jp	_intrinsic_nop
} by {
	nop
	ret
	; peephole z88dk-intrinsic-nop
}

replace restart {
	call	_intrinsic_exx
} by {
	exx
	; peephole z88dk-intrinsic-exx
}

replace restart {
	jp	_intrinsic_exx
} by {
	exx
	ret
	; peephole z88dk-intrinsic-exx
}

replace restart {
	call	_intrinsic_ex_de_hl
} by {
	ex	de,hl
	; peephole z88dk-intrinsic-ex-de-hl
}

replace restart {
	jp	_intrinsic_ex_de_hl
} by {
	ex	de,hl
	ret
	; peephole z88dk-intrinsic-ex-de-hl
}

replace restart {
	call	_intrinsic_return_bc
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-intrinsic-return-bc
}

replace restart {
	jp	_intrinsic_return_bc
} by {
	ld	l,c
	ld	h,b
	ret
	; peephole z88dk-intrinsic-return-bc
}

replace restart {
	call	_intrinsic_return_de
} by {
	ld	l,e
	ld	h,d
	; peephole z88dk-intrinsic-return-de
}

replace restart {
	jp	_intrinsic_return_de
} by {
	ld	l,e
	ld	h,d
	ret
	; peephole z88dk-intrinsic-return-de
}

replace restart {
	call	_intrinsic_swap_endian_16_fastcall
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	; peephole z88dk-intrinsic-swap-endian-16
}

replace restart {
	jp	_intrinsic_swap_endian_16_fastcall
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	ret
	; peephole z88dk-intrinsic-swap-endian-16
}

replace restart {
	call	_intrinsic_swap_endian_32_fastcall
} by {
	ld	a,d
	ld	d,l
	ld	l,a
	ld	a,e
	ld	e,h
	ld	h,a
	; peephole z88dk-intrinsic-swap-endian-32
}

replace restart {
	jp	_intrinsic_swap_endian_32_fastcall
} by {
	ld	a,d
	ld	d,l
	ld	l,a
	ld	a,e
	ld	e,h
	ld	h,a
	ret
	; peephole z88dk-intrinsic-swap-endian-32
}

replace restart {
	call	_intrinsic_swap_word_32_fastcall
} by {
	ex	de,hl
	; peephole z88dk-intrinsic-swap-word-32
}

replace restart {
	jp	_intrinsic_swap_word_32_fastcall
} by {
	ex	de,hl
	ret
	; peephole z88dk-intrinsic-swap-word-32
}

replace restart {
	ret
	ret
} by {
	ret
	; peephole z88dk-intrinsic-retret
}

replace restart {
	call	_intrinsic_emit_%1
} by {
	nop	; defb %1
	; peephole z88dk-intrinsic-emit %1
}

replace restart {
	jp	_intrinsic_emit_%1
} by {
	nop	; defb %1
	ret
	; peephole z88dk-intrinsic-emit %1
}

// ZX NEXT SPECIFIC SEE ISSUE #2757
// duplicated from lib/arch/z80n/z80n_rules.1

replace restart {
	call	_ZXN_NEXTREG_R_%1
	jp	_ZXN_NEXTREG_V_%2
} by {
	call	_ZXN_NEXTREG_R_%1
	call	_ZXN_NEXTREG_V_%2
	ret
	; peephole z88dk-intrinsic-nextreg %1,%2
}

replace restart {
	call	_ZXN_NEXTREG_R_%1
	call	_ZXN_NEXTREG_V_%2
} by {
	nextreg	#%1,#%2
	; peephole z88dk-intrinsic-nextreg %1,%2
}

replace restart {
	jp	_ZXN_NEXTREGA_%1
} by {
	call	_ZXN_NEXTREGA_%1
	ret
	; peephole z88dk-intrinsic-nextrega %1
}

replace restart {
	call	_ZXN_NEXTREGA_%1
} by {
	ld	a,l
	nextreg	#%1,a
	; peephole z88dk-intrinsic-nextrega %1
}

replace restart {
	jp	_ZXN_READ_REG_fastcall
} by {
	call	_ZXN_READ_REG_fastcall
	ret
	; peephole z88dk-intrinsic-zxn-read-reg
}

replace restart {
	call	_ZXN_READ_REG_fastcall
} by {
	ld	bc,#0x243b
	out	(c),l
	inc	b
	in	l,(c)
	; peephole z88dk-intrinsic-zxn-read-reg
}

replace restart {
	jp	_ZXN_WRITE_REG_callee
} by {
	call	_ZXN_WRITE_REG_callee
	ret
	; peephole z88dk-intrinsic-zxn-write-reg
}

replace restart {
	call	_ZXN_WRITE_REG_callee
} by {
	pop	hl
	ld	bc,#0x243b
	out	(c),l
	inc	b
	out	(c),h
	; peephole z88dk-intrinsic-zxn-write-reg
}

replace restart {
	jp	_ZXN_READ_MMU%1
} by {
	call	_ZXN_READ_MMU%1
	ret
	; peephole z88dk-intrinsic-zxn-read-mmu%1
}

replace restart {
	call	_ZXN_READ_MMU%1
} by {
	ld	bc,#0x243b
	ld	a,#0x50+%1
	out	(c),a
	inc	b
	in	l,(c)
	; peephole z88dk-intrinsic-zxn-read-mmu%1
}

replace restart {
	jp	_ZXN_WRITE_MMU_%1
} by {
	call	_ZXN_WRITE_MMU_%1
	ret
	; peephole z88dk-intrinsic-zxn-write-mmu%1
}

replace restart {
	call	_ZXN_WRITE_MMU_%1
} by {
	ld	a,l
	nextreg	#0x50+%1,a
	; peephole z88dk-intrinsic-zxn-write-mmu%1
}


barrier


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK BUGFIXES APPLIED TO SDCC FOR #9570
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	hl,#%1
	ld	l,(hl)
	ld	hl,#%1 + 1
	ld	h,(hl)
	ld	hl,#%1 + 2
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	; peephole z88dk-bugfix-1
}
// if notVolatile

replace restart {
	ld	hl,#%1
	ld	l,(hl)
	ld	hl,#%1 + 1
	ld	h,(hl)
	ld	hl,#%1 + 2
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	hl,(#%1)
	ld	de,(#%1 + 2)
	; peephole z88dk-bugfix-2
}

replace restart {
	ld	hl,#%1
	ld	hl,#%2
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
} by {
	ld	hl,#%1
	ld	a,(#%2)
	ld	(hl),a
	inc	hl
	ld	a,(#%2 + 1)
	ld	(hl),a
	ld	hl,#%2 + 1
	; peephole z88dk-bugfix-3a
}

replace restart {
	ld	hl,#%1
	ld	hl,#%2
	ld	a,(hl)
	ld	(hl),a
} by {
	ld	a,(#%2)
	ld	(#%1),a
	; peephole z88dk-bugfix-3b
}

replace restart {
	ld	a,i
	di
	push	af
} by {
	call	____sdcc_cpu_push_di
	; peephole z88dk-bugfix-4a-critical-open-1
}

replace restart {
	pop	af
	jp	PO,%1
	ei
%1:
} by {
	call	____sdcc_cpu_pop_ei
%1:
	; peephole z88dk-bugfix-4c-critical-close-1
}

replace restart {
	in	a,(%1)
	in	a,(%1)
	ld	l,a
	in	a,(%1)
	ld	h,a
} by {
	ld	hl,(%1)
	; peephole z88dk-bugfix-5a-sdcc-2523
}

replace restart {
	in	a,(%1)
	in	a,(%1)
	ld	e,a
	in	a,(%1)
	ld	d,a
} by {
	ld	de,(%1)
	; peephole z88dk-bugfix-5b-sdcc-2523
}

replace restart {
	in	a,(%1)
	in	a,(%1)
	ld	c,a
	in	a,(%1)
	ld	b,a
} by {
	ld	bc,(%1)
	; peephole z88dk-bugfix-5c-sdcc-2523
}

replace restart {
	ld	a,(hl)
	and	a,#%5
	jp	NZ,%1
	jp	%2
%1:
	jp	%3
%2:
	or	a, a
	jp	NZ,%3
} by {
	ld	a,(hl)
	and	a,#%5
	jp	NZ,%1
	jp	%2
%1:
	jp	%3
%2:
	ld	a,(hl)
	and	a,#0x01
	jp	NZ,%3
	; peephole z88dk-bugfix-6a
}

replace restart {
	ld	a,(hl)
	and	a,#%5
	jp	NZ,%1
	jp	%2
%1:
	or	a, a
	jp	NZ,%2
} by {
	ld	a,(hl)
	and	a,#%5
	jp	NZ,%1
	jp	%2
%1:
	ld	a,(hl)
	and	a,#0x01
	jp	NZ,%2
	; peephole z88dk-bugfix-6b
}

replace restart {
	ld	hl,#%1
	ld	(hl),l
	inc	hl
	ld	(hl),h
} by {
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-bugfix-7a
}

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),l
	inc	hl
	ld	(hl),h
} by {
	ld	(#%1+%2),hl
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-bugfix-7b
}

replace restart {
	ld	hl,#%1
	ld (hl),l
} by {
	ld	a,l
	ld	(#%1),a
	; peephole z88dk-bugfix-8a1
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld (hl),l
} by {
	ld	a,l
	ld	hl,#%1
	ld	(hl),a
	; peephole z88dk-bugfix-8a2
} if notUsed('a')

replace restart {
	ld	hl,#%1
	ld	(hl),l
} by {
	ld	e,l
	ld	hl,#%1
	ld	(hl),e
	; peephole z88dk-bugfix-8a3
} if notUsed('e')

replace restart {
	ld	hl,#%1
	ld	(hl),l
} by {
	ld	c,l
	ld	hl,#%1
	ld	(hl),c
	; peephole z88dk-bugfix-8a4
} if notUsed('c')

replace restart {
	ld	hl,#%1 + %2
	ld (hl),l
} by {
	ld	a,l
	ld	(#%1 + %2),a
	; peephole z88dk-bugfix-8b1
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld (hl),l
} by {
	ld	a,l
	ld	hl,#%1 + %2
	ld	(hl),a
	; peephole z88dk-bugfix-8b2
} if notUsed('a')

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),l
} by {
	ld	e,l
	ld	hl,#%1 + %2
	ld	(hl),e
	; peephole z88dk-bugfix-8b3
} if notUsed('e')

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),l
} by {
	ld	c,l
	ld	hl,#%1 + %2
	ld	(hl),c
	; peephole z88dk-bugfix-8b4
} if notUsed('c')

replace restart {
	ld	hl,#%1
	ld	(hl),h
	inc	hl
	ld	(hl),l
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-bugfix-9a
} if notUsed('a')

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),h
	inc	hl
	ld	(hl),l
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	ld	(#%1+%2),hl
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-bugfix-9b
} if notUsed('a')

replace restart {
	ld	hl,#%1
	ld	(hl),%2
	inc	hl
	ld	(hl),l
} by {
	ld	h,l
	ld	l,%2
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-bugfix-10a
} if same(%2 'a' 'b' 'c' 'd' 'e')

replace restart {
	ld	hl,#%1 + %3
	ld	(hl),%2
	inc	hl
	ld	(hl),l
} by {
	ld	h,l
	ld	l,%2
	ld	(#%1+%3),hl
	ld	hl,#%1 + %3 + 1
	; peephole z88dk-bugfix-10b
} if same(%2 'a' 'b' 'c' 'd' 'e')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ldi
	ldi
	ldi
	ld	a,(hl)
	ld	(de),a
	inc	bc
	inc	bc
	inc	bc
	; peephole z88dk-bugfix-11a
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	(hl),a
} by {
	push	de
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ldi
	ldi
	ldi
	ld	a,(hl)
	ld	(de),a
	inc	bc
	inc	bc
	inc	bc
	pop	de
	; peephole z88dk-bugfix-11b
}

// z88dk-bugfix-12a and z88dk-bugfix-12b removed in #1811

replace restart
{
	push	hl
	pop	iy
	push	hl
	push	bc
	push	de
	push	iy
	pop	de
	pop	hl
	pop	bc
	pop	hl
	push	hl
} by {
	push	hl
	push	hl
	pop	iy
	ex	de,hl
	; peephole z88dk-bugfix-13
}

replace restart {
	ld	a,l
	ld	d,h
	ld	d,a
	ld	h,d
} by {
	ld	a,l
	ld	d,l
	; peephole z88dk-bugfix-14
}

barrier


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// SDCC PEEPHOLE RULES EXCEPT JP->JR FROM #9570
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

// peeph-z80.def - Z80 peephole rules
//
// Some of these peepholes could be potentially moved to peeph.def, but a
// GBZ80 expert should have a look at them before.
//
// (c) Philipp Klaus Krause (pkk@spth.de, philipp@colecovision.eu) 2006 - 2012
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option) any
// later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

replace restart {
	ld	%1, %1
} by {
	; peephole 0 removed redundant load from %1 into %1.
} if notVolatile(%1)

replace restart {
	ld	%1, %2
} by {
	; peephole 1 removed dead load from %2 into %1.
} if notVolatile(%1), notUsed(%1), notVolatile(%2)

replace restart {
	add	ix,sp
} by {
	; peephole 1a removed dead frame pointer setup.
} if notUsed('ix')

replace restart {
	ld	%1, %2 + %3
} by {
	; peephole 2 removed dead load from %2 + %3 into %1.
} if notVolatile(%1), notUsed(%1)
// Should probably check for notVolatile(%2), too, but gives many false positives and no regression tests fail.

replace restart {
	ld	%1, (iy)
} by {
	ld	%1, 0 (iy)
	; peephole 3 made 0 offset explicit.
}

replace restart {
	ld	(iy), %1
} by {
	ld	0 (iy), %1
	; peephole 4 made 0 offset explicit.
}

replace restart {
	inc	hl
} by {
	; peephole 5 removed dead increment of hl.
} if notUsed('hl')

replace restart {
	dec	hl
} by {
	; peephole 6 removed dead decrement of hl.
} if notUsed('hl')

replace restart {
	ld	%1, %2 (iy)
} by {
	; peephole 7 removed dead load from %2 (iy) into %1.
} if notUsed(%1)
// Should probably check for notVolatile(), but gives many false positives and no regression tests fail.

replace restart {
	ld	%1, %2 (ix)
} by {
	; peephole 8 removed dead load from %2 (ix) into %1.
} if notUsed(%1)

replace restart {
	ld	%1, %2
	ld	%3, %1
} by {
	; peephole 9 loaded %3 from %2 directly instead of going through %1.
	ld	%3, %2
} if canAssign(%3 %2), notVolatile(%1), notUsed(%1)

replace restart {
	ld	%1, %2
	ld	%3, %4
	ld	%5, %1
} by {
	ld	%5, %2
	; peephole 10 loaded %5 from %2 directly instead of going through %1.
	ld	%3, %4
} if notUsed(%1), canAssign(%5 %2), notVolatile(%1), notVolatile(%5), operandsNotRelated(%1 %3), operandsNotRelated(%1 %4), operandsNotRelated(%2 %3), operandsNotRelated(%3 %5), operandsNotRelated(%4 %5), notSame(%3 %4 '(hl)' '(de)' '(bc)')
// Rule OK unless both %5 and %4 are volatile, but we can't express that directly.

replace restart {
	ld	%1, %2 (%3)
	ld	%4, %1
} by {
	; peephole 11 loaded %2 (%3) into %4 directly instead of going through %1.
	ld	%4, %2 (%3)
} if canAssign(%4 %2 %3), notVolatile(%1), notUsed(%1)

replace restart {
	ld	%1, %2
	ld	%3 (%4), %1
} by {
	; peephole 12 loaded %2 into %3 (%4) directly instead of going through %1.
	ld	%3 (%4), %2
} if canAssign(%3 %4 %2), notVolatile(%1), notUsed(%1), notSame(%1 'hl' 'de' 'bc')

replace restart {
	ld	%1, %2 (%3)
	ld	%4, %5 (%6)
	ld	%7, %1
} by {
	ld	%7, %2 (%3)
	; peephole 13 loaded %2 (%3) into %7 directly instead of going through %1.
	ld	%4, %5 (%6)
} if canAssign(%7 %2 %3), notVolatile(%1), notUsed(%1), notSame(%1 %4), notSame(%7 %4)

replace restart {
	ld	%1, %7
	ld	%5 (%6), %4
	ld	%2 (%3), %1
} by {
	ld	%5 (%6), %4
	; peephole 14 loaded %7 into %2 (%3) directly instead of going through %1.
	ld	%2 (%3), %7
} if canAssign(%2 %3 %7), notVolatile(%1), notUsed(%1), notSame(%1 %4)

replace restart {
	ld	%1, %2 (%3)
	ld	%4, %5
	ld	%7, %1
} by {
	ld	%7, %2 (%3)
	; peephole 15 loaded %2 (%3) into %7 directly instead of going through %1.
	ld	%4, %5
} if canAssign(%7 %2 %3), notVolatile(%1), notUsed(%1), operandsNotRelated(%1 %5), operandsNotRelated(%7 %4), operandsNotRelated(%7 %5), notSame(%4 '(hl)' '(de)' '(bc)'), notSame(%5 '(hl)' '(de)' '(bc)' '(iy)')

replace restart {
	ld	%1,#%2
	ld	a,%3 (%1)
} by {
	; peephole 16 loaded %2 into a directly instead of going through %1.
	ld	a,(#%2 + %3)
} if notUsed(%1)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
} by {
	ld	a,(#%1)
	; peephole 17 loaded a from (#%1) directly instead of using hl.
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
} by {
	; peephole 18 loaded %2 into a directly instead of using hl.
	ld	a,(#%1 + %2)
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),a
} by {
	ld	(#%1),a
	; peephole 19 loaded (#%1) from a directly instead of using hl.
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),a
} by {
	ld	(#%1 + %2),a
	; peephole 20 loaded (#%1) from a directly instead of using hl.
} if notUsed('hl')

replace restart {
	srl	%1
	ld	a,%1
} by {
	ld	a,%1
	; peephole 21 shifted in a instead of %1.
	srl	a
} if notVolatile(%1), notUsed(%1)

replace restart {
	ld	e, l
	ld	d, h
	ld	a, (de)
	srl	a
	ld	(de), a
} by {
	ld	e, l
	ld	d, h
	srl	(hl)
	ld	a, (hl)
	; peephole 21a shifted in (hl) instead of a.
}

replace restart {
	ld	a, %1 (%2)
	srl	a
	ld	%1 (%2), a
} by {
	srl	%1 (%2)
	ld	a, %1 (%2)
	; peephole 21b shifted in (%2) instead of a.
}

replace restart {
	ld	iy, #%1
	ld	%2, %3 (iy)
	srl	%2
	bit %4, %3 (iy)
} by {
	ld	hl, #%1 + %3
	; peephole 21c used hl instead of iy.
	ld	%2, (hl)
	srl %2
	bit %4, (hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	%1,(hl)
	ld	a,%2 (%3)
	sub	a,%1
} by {
	ld	a,%2 (%3)
	; peephole 22 used (hl) in sub directly instead of going through %1.
	sub	a,(hl)
} if notVolatile(%1), notUsed(%1)

replace restart {
	inc	bc
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	; peephole 23 incremented in hl instead of bc.
	inc	hl
} if notUsed('bc')

replace restart {
	inc	de
	ld	l,e
	ld	h,d
} by {
	ld	l,e
	ld	h,d
	; peephole 24 incremented in hl instead of de.
	inc	hl
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,#%1
} by {
	ld	a,#%1
	ld	c,l
	ld	b,h
	; peephole 25a delay copy of hl into bc
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(bc),a
} by {
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole 25b loaded a into (hl) instead of (bc)
}

replace restart {
	ld	a,#%1
	ld	(hl),a
} by {
	ld	(hl),#%1
	; peephole 25c loaded #%1 into (hl) directly
} if notUsed('a')

replace restart {
	ex	de, hl
	push	de
} by {
	; peephole 26 pushed hl directly instead of going through de.
	push	hl
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	l,%1
	ld	h,d
	push	hl
} by {
	; peephole 27 pushed de instead of hl removing a load.
	ld	e,%1
	push	de
} if notUsed('hl'), notUsed('e')

replace restart {
	ex	de, hl
	push	bc
	push	de
} by {
	; peephole 28 pushed hl directly instead of going through de.
	push	bc
	push	hl
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	l,c
	ld	h,b
	push	hl
} by {
	; peephole 29 pushed bc directly instead of going through hl.
	push	bc
} if notUsed('hl')

replace restart {
	ld	l,%1
	ld	h,b
	push	hl
} by {
	; peephole 30 pushed bc instead of hl removing a load.
	ld	c,%1
	push	bc
} if notUsed('hl'), notUsed('c')

replace restart {
	ld	c,l
	ld	b,h
	push	%1
	push	bc
} by {
	; peephole 31 pushed hl directly instead of going through bc.
	push	%1
	push	hl
} if notUsed('bc'), notSame(%1 'bc')

replace restart {
	pop	de
	ld	l, e
	ld	h, d
} by {
	; peephole 32 popped hl directly instead of going through de.
	pop	hl
} if notUsed('de')

replace restart {
	pop	bc
	ld	l, c
	ld	h, b
} by {
	; peephole 33 popped hl directly instead of going through bc.
	pop	hl
} if notUsed('bc')

replace restart {
	ld	%1 (ix), %2
	ld	%3, %1 (ix)
} by {
	; peephole 34 loaded %3 from %2 instead of going through %1 (ix).
	ld	%1 (ix), %2
	ld	%3, %2
}
// Don't need to check for volatile, since ix is used for the stack.

replace restart {
	ld	%1 (ix), a
	push	de
	ld	%2, %1 (ix)
} by {
	ld	%1 (ix), a
	push	de
	; peephole 34a loaded %2 from a instead of %1 (ix)
	ld	%2, a
}	

replace restart {
	push	af
	inc	sp
	ld	a,e
	push	af
	inc	sp
} by {
	; peephole 35 pushed de instead of pushing a twice.
	ld	d,a
	push	de
} if notUsed('d'), notUsed('a')

replace restart {
	push	af
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	; peephole 36 pushed de instead of pushing a twice.
	ld	d,a
	ld	e,#%1
	push	de
} if notUsed('de')

replace restart {
	push	af
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	; peephole 37 pushed bc instead of pushing a twice.
	ld	b,a
	ld	c,#%1
	push	bc
} if notUsed('bc')

replace restart {
	push	bc
	inc	sp
	push	de
	inc	sp
} by {
	ld	c, d
	; peephole 37a combined pushing of b and d.
	push	bc
} if notUsed('c')

replace restart {
	push	bc
	inc	sp
	ld	a, c
	push	af
	inc	sp
} by {
	push	bc
	ld	a, c
	; peephole 38 simplified pushing bc.
}

replace restart {
	push	de
	inc	sp
	ld	a, #%1
	push	af
	inc	sp
} by {
	ld	e, #%1
	push	de
	; peephole 39 simplified pushing de.
} if notUsed('e')

replace restart {
	ld	a,#%1
	ld	d,a
} by {
	; peephole 40 loaded #%1 into d directly instead of going through a.
	ld	d,#%1
} if notUsed('a')

replace restart {
	ld	%1,a
	ld	%2,%1
} by {
	; peephole 41 loaded %2 from a directly instead of going through %1.
	ld	%2,a
} if notUsed(%1)

replace restart {
	ld	a,%1 (%3)
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	; peephole 42 pushed %1 (%3), %2(%3) through hl instead of af.
	ld	h,%1 (%3)
	ld	l,%2 (%3)
	push	hl
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	c, l
	ld	b, h
	push	bc
} by {
	; peephole 43 pushed hl instead of bc.
	push	hl
} if notUsed('bc')

replace restart {
	ld	a, (hl)
	inc	hl
	ld	h, (hl)
	ld	l, a
	push	hl
} by {
	; peephole 43a pushed bc instead of hl.
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} if notUsed('bc'), notUsed('hl')

replace restart {
	pop	%1
	push	%1
} by {
	; peephole 44 eleminated dead pop/push pair.
} if notUsed(%1)

replace restart {
	push	hl
	pop	bc
} by {
	ld	c, l
	ld	b, h
	; peephole 44a replaced push/pop pair by loads.
} if notUsed('hl')

replace restart {
	push	hl
	pop	de
} by {
	ld	e, l
	ld	d, h
	; peephole 44b replaced push/pop pair by loads.
} if notUsed('hl')

replace restart {
	ld	iy,#%1
	or	a,%2 (iy)
} by {
	; peephole 45 used hl instead of iy.
	ld	hl,#%1 + %2
	or	a,(hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy,#%1
	ld	%2,%3 (iy)
} by {
	; peephole 46 used hl instead of iy.
	ld	hl,#%1 + %3
	ld	%2, (hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy,#%1
	ld	h,%3 (iy)
} by {
	; peephole 46a used hl instead of iy.
	ld	hl,#%1 + %3
	ld	h, (hl)
} if notUsed('iy'), notUsed('l')

replace restart {
	ld	iy,#%1
	ld	%2 (iy), %3
} by {
	; peephole 46b used hl instead of iy.
	ld	hl,#%1 + %2
	ld	(hl), %3
} if notUsed('iy'), notUsed('hl'), notSame(%3 'h' 'l')

replace restart {
	ld	iy,#%1
	ld	%2,0 (iy)
	ld	%3,1 (iy)
} by {
	; peephole 47 used hl instead of iy.
	ld	hl,#%1
	ld	%2, (hl)
	inc	hl
	ld	%3, (hl)
} if notUsed('iy'), notUsed('hl'), operandsNotRelated(%2 'hl')

replace restart {
	ld	iy,#%1
	ld	%2 (iy),%3
	ld	l,%2 (iy)
} by {
	; peephole 48 used hl instead of iy.
	ld	hl,#%1 + %2
	ld	(hl),%3
	ld	l,(hl)
} if notUsed('iy'), notUsed('h')

replace restart {
	ld	iy,#%1
	ld	%2 (%3), %4
} by {
	; peephole 49 used hl instead of iy.
	ld	hl,#%1 + %2
	ld	(hl), %4
} if notUsed('iy'), notUsed('hl'), operandsNotRelated(%4 'hl')

replace restart {
	ld	iy,#%1
	bit	%2,%3 (iy)
} by {
	; peephole 49a used hl instead of iy.
	ld	hl,#%1+%3
	bit	%2, (hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	ld	%2, %3 (iy)
} by {
	; peephole 49b used hl instead of iy.
	ld	hl, #%1+%3
	add	hl, sp
	ld	%2, (hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	ld	%2, 0 (iy)
	ld	%3, 1 (iy)
} by {
	; peephole 49c used hl instead of iy.
	ld	hl, #%1
	add	hl, sp
	ld	%2, (hl)
	inc	hl
	ld	%3, (hl)
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	ld	l, 0 (iy)
	ld	h, 1 (iy)
} by {
	; peephole 49d used hl instead of iy.
	ld	hl, #%1
	add	hl, sp
	ld	a, (hl)
	inc	hl
	ld	h, (hl)
	ld	l, a
} if notUsed('iy'), notUsed('a')

replace restart {
	ld	iy, #%1
	add	iy, sp
	ld	0 (iy), #%2
	ld	1 (iy), #%3
} by {
	; peephole 49e used hl instead of iy.
	ld	hl, #%1
	add	hl, sp
	ld	(hl), #%2
	inc	hl
	ld	(hl), #%3
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1+1
	ld	a, 1 (iy)
	or	a, 0 (iy)
} by {
	ld	hl, #%1
	ld	a, (hl)
	dec	hl
	or	a, (hl)
	; peephole 49f used hl instead of iy.
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	ld	a, 1 (iy)
	or	a, 0 (iy)
} by {
	ld	hl, #%1+1
	add	hl, sp
	ld	a, (hl)
	dec	hl
	or	a, (hl)
	; peephole 49f' used hl instead of iy.
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	bit	%2, %3 (iy)
} by {
	ld	hl, #%1+%3
	add	hl, sp
	bit	%2, (hl)
	; peephole 49g used hl instead of iy.
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy, #%1
	add	iy, sp
	or	a, %2 (iy)
} by {
	ld	hl, #%1+%2
	add	hl, sp
	or	a, (hl)
	; peephole 49h used hl instead of iy.
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	inc	bc
} by {
	; peephole 51 incremented in hl instead of bc.
	inc	hl
	ld	c,l
	ld	b,h
} if notUsed('hl')

replace restart {
	ld	iy, #%1
	inc	%2 (iy)
} by {
	; peephole 51a incremented in (hl) instead of %2 (iy).
	ld	hl, #%1+%2
	inc	(hl)
} if notUsed('hl'), notUsed('iy')

replace restart {
	ld	iy, #%1
	dec	%2 (iy)
} by {
	; peephole 51a' decremented in (hl) instead of %2 (iy).
	ld	hl, #%1+%2
	dec	(hl)
} if notUsed('hl'), notUsed('iy')

replace restart {
	add	hl, hl
	ld	e, l
	ld	d, h
	inc	de
	inc	de
} by {
	inc	hl
	; peephole 51b incremented once in hl instead of incrementing in de twice.
	add	hl, hl
	ld	e, l
	ld	d, h
} if notUsed('hl')

replace restart {
	add	hl, hl
	inc	hl
	inc	hl
} by {
	inc	hl
	; peephole 51c incremented once in hl instead of incrementing in hl twice.
	add	hl, hl
}

replace restart {
	add	a, a
	add	a, a
	add	a, #0x04
} by {
	inc	a
	; peephole 51d incremented a once instead of adding #0x04 to a.
	add	a, a
	add	a, a
}

replace restart {
	add	hl, hl
	pop	de
	inc	hl
	inc	hl
} by {
	inc	hl
	; peephole 51e incremented once in hl instead of incrementing in hl twice.
	add	hl, hl
	pop	de
}

replace restart {
	ld	a,%1 (%2)
	bit	%3,a
} by {
	; peephole 52 tested bit of %1 (%2) directly instead of going through a.
	bit	%3,%1 (%2)
} if notUsed('a')

replace restart {
	ld	a,%1
	bit	%2,a
} by {
	; peephole 53 tested bit %2 of %1 directly instead of going through a.
	bit	%2,%1
} if notUsed('a'), canAssign(%1 'b')

replace restart {
	ld	a, %1
	set	%2, a
	ld	%1, a
} by {
	; peephole 54 set bit %2 of %1 directly instead of going through a.
	set	%2, %1
	ld	a, %1
} if canAssign(%1 'b')
// canAssign(%1 'b') is true, iff set b, %1 is possible.

replace restart {
	ld	a, %1 (%2)
	set	%3, a
	ld	%1 (%2), a
} by {
	; peephole 55 set bit %3 of %1 (%2) directly instead of going through a.
	set	%3, %1 (%2)
	ld	a, %1 (%2)
}

replace restart {
	ld	a, %1
	res	%2, a
	ld	%1, a
} by {
	; peephole 56 reset bit %2 of %1 directly instead of going through a.
	res	%2, %1
	ld	a, %1
} if canAssign(%1 'b')
// canAssign(%1 'b') is true, iff set b, %1 is possible.

replace restart {
	ld	a, %1 (%2)
	res	%3, a
	ld	%1 (%2), a
} by {
	; peephole 57 reset bit %3 of %1 (%2) directly instead of going through a.
	res	%3, %1 (%2)
	ld	a, %1 (%2)
}

replace restart {
	ld	c, %1 (%2)
	ld	b, %3 (%4)
	ld	l,c
	ld	h,b
} by {
	; peephole 58 stored %1 (%2) %3 (%4) into hl directly instead of going through bc.
	ld	l, %1 (%2)
	ld	h, %3 (%4)
} if notUsed('bc')

replace restart {
	ld	c, %1
	ld	b, %2
	ld	l,c
	ld	h,b
} by {
	; peephole 59 stored %2%1 into hl directly instead of going through bc.
	ld	l, %1
	ld	h, %2
} if notUsed('bc'), operandsNotRelated(%2 'l')

replace restart {
	jp	NC,%1
	jp	%2
%1:
} by {
	jp	C,%2
	; peephole 60 removed jp by using inverse jump logic
%1:
} if labelRefCountChange(%1 -1)

replace restart {
	jp	C,%1
	jp	%2
%1:
} by {
	jp	NC,%2
	; peephole 61 removed jp by using inverse jump logic
%1:
} if labelRefCountChange(%1 -1)

replace restart {
	jp	NZ,%1
	jp	%2
%1:
} by {
	jp	Z,%2
	; peephole 62 removed jp by using inverse jump logic
%1:
} if labelRefCountChange(%1 -1)

replace restart {
	jp	Z,%1
	jp	%2
%1:
} by {
	jp	NZ,%2
	; peephole 63 removed jp by using inverse jump logic
%1:
} if labelRefCountChange(%1 -1)

replace restart {
	jp	%5
} by {
	jp	%6
	; peephole 64 jumped to %6 directly instead of via %5.
} if labelIsUncondJump(), notSame(%5 %6), labelRefCountChange(%5 -1), labelRefCountChange(%6 +1)

replace restart {
	jp	%1,%5
} by {
	jp	%1,%6
	; peephole 65 jumped to %6 directly instead of via %5.
} if labelIsUncondJump(), notSame(%5 %6), labelRefCountChange(%5 -1), labelRefCountChange(%6 +1)

replace restart {
	jp	%1
%2:
%1:
} by {
   ; peephole 65a eliminated jump.
%2:
%1:
} if labelRefCountChange(%1 -1)

// A peephole that makes the code longer. Let's hope it's worth it in speed gain and further optimization potential.
replace restart {
	ld	a,#0x00
%1:
	bit	%2,a
	jp	Z,%3
} by {
	ld	a,#0x00
	jp	%3
	; peephole 65a jumped directly to %3 instead of testing a first.
%1:
	bit	%2,a
	jp	Z,%3
} if labelRefCountChange(%3 +1)

replace restart {
	ld	%1, %2
	jp	%3
	jp	%4
} by {
	ld	%1, %2
	jp	%3
	; peephole 65b removed unreachable jump to %3.
}

replace restart {
	ld	%1, %2
	jp	%3
%3:
} by {
	ld	%1, %2
%3:
	; peephole 65c removed redundant jump to %3.
} if labelRefCountChange(%3 -1)

replace restart {
	ld	%1, #0x01
	bit	0, %1
	jp	Z, %2
} by {
	ld	%1, #0x01
	; peephole 65d removed impossible jump to %2.
} if labelRefCountChange(%2 -1)

replace restart {
	rlca
	and	a, #0x01
	jp	Z, %1
} by {
	rlca
	; peephole 65e removed and by changing jump condition.
	jp	NC, %1
} if notUsed('a'), notUsedFrom(%1 'a')

replace restart {
	rlca
	and	a, #0x01
	jp	NZ, %1
} by {
	rlca
	; peephole 65f removed and by changing jump condition.
	jp	C, %1
} if notUsed('a'), notUsedFrom(%1 'a')

replace restart {
	xor	a,a
	ld	a,#0x00
} by {
	xor	a,a
	; peephole 66 removed redundant load of 0 into a.
}

replace restart {
	ld	e,#0x%1
	ld	d,#0x%2
} by {
	ld	de,#0x%2%1
	; peephole 67 combined constant loads into register pair.
}

replace restart {
	ld	d,#0x%1
	ld	e,#0x%2
} by {
	ld	de,#0x%1%2
	; peephole 67a combined constant loads into register pair.
}

replace restart {
	ld	l,#0x%1
	ld	h,#0x%2
} by {
	ld	hl,#0x%2%1
	; peephole 68 combined constant loads into register pair.
}

replace restart {
	ld	h,#0x%1
	ld	l,#0x%2
} by {
	ld	hl,#0x%1%2
	; peephole 68a combined constant loads into register pair.
}

replace restart {
	ld	c,#0x%1
	ld	b,#0x%2
} by {
	ld	bc,#0x%2%1
	; peephole 69 combined constant loads into register pair.
}

replace restart {
	ld	b,#0x%1
	ld	c,#0x%2
} by {
	ld	bc,#0x%1%2
	; peephole 69a combined constant loads into register pair.
}

replace restart {
	ld	%1,a
	ld	a,%1
} by {
	ld	%1,a
	; peephole 70 removed redundant load from %1 into a.
} if notVolatile(%1)
// This gives many false negatives and without the test no problems are encountered in the regression tests
// Maybe we can try this after 2.7.0 release

replace restart {
	ld	a,%1
	ld	%1,a
} by {
	ld	a,%1
	; peephole 71 removed redundant load from a into %1.
} if notVolatile(%1)
// This gives many false negatives and without the test no problems are encountered in the regression tests
// Maybe we can try this after 2.7.0 release

replace restart {
	ld	%1,a
	ld	a,%2
	or	a,%1
} by {
	ld	%1,a
	or	a,%2
	; peephole 72 removed load by reordering or arguments.
} if notVolatile(%1), canAssign('b' %2)
// canAssign('b' %2) is true, iff or a,%2 is possible.

replace restart {
	or	a,%1
	or	a,a
} by {
	or	a,%1
	; peephole 73 removed redundant or after or.
}

replace restart {
	or	a,%1 (%2)
	or	a,a
} by {
	or	a,%1 (%2)
	; peephole 74 removed redundant or after or.
}

replace restart {
	and	a,%1
	or	a,a
} by {
	and	a,%1
	; peephole 75 removed redundant or after and.
}

replace restart {
	xor	a,%1
	or	a,a
} by {
	xor	a,%1
	; peephole 76 removed redundant or after xor.
}

replace restart {
	xor	a,%1 (%2)
	or	a,a
} by {
	xor	a,%1 (%2)
	; peephole 77 removed redundant or after xor.
}

replace restart {
	ld	%1,%2
	ld	a,%2
} by {
	ld	a,%2
	ld	%1,a
	; peephole 78 load value in a first and use it next
} if notVolatile(%1 %2)

replace restart {
	ld	%1,%2
	ld	%3,%4
	ld	%2,%1
	ld	%4,%3
} by {
	ld	%1,%2
	ld	%3,%4
	; peephole 79 removed redundant load from %3%1 into %4%2
} if notVolatile(%1 %2 %3 %4)

replace restart {
	push	de
	inc	sp
	ld	a,e
	push	af
	inc	sp
} by {
	push	de
	; peephole 80 pushed de
} if notUsed('a')

replace restart {
	ld	iy,%1
	add	iy,sp
	ld	sp,iy
} by {
	ld	hl,%1
	add	hl,sp
	ld	sp,hl
	; peephole 81 fixed stack using hl instead of iy.
} if notUsed('hl'), notUsed('iy')

replace restart {
	ld	a,%1
	sub	a,%2
	jp	%3,%4
	ld	a,%1
} by {
	ld	a,%1
	cp	a,%2
	jp	%3,%4
	; peephole 82 removed load from %1 into a by replacing sub with cp
	assert	a=%1
} if notVolatile(%1), notUsedFrom(%4 'a')

replace restart {
	assert	a=%1
	sub	a,%2
	jp	%3,%4
	ld	a,%1
} by {
	cp	a,%2
	jp	%3,%4
	; peephole 83 removed load from %1 into a by replacing sub with cp
	assert	a=%1
} if notUsedFrom(%4 'a')

replace restart {
	assert	a=%1
} by {
}

replace restart {
	sub	a,#0xFF
	jp	Z,%1
} by {
	inc	a
	; peephole 84 replaced sub a,#0xFF by inc a.
	jp	Z,%1
}

replace restart {
	sub	a,#0xFF
	jp	NZ,%1
} by {
	inc	a
	; peephole 85 replaced sub a,#0xFF by inc a.
	jp	NZ,%1
}

replace restart {
	rlca
	ld	a,#0x00
	rla
} by {
	rlca
	and	a,#0x01
	; peephole 86 replaced zero load, rla by and since rlca writes the same value to carry bit and least significant bit.
}

replace restart {
	ld	%1,%2
	push	%1
	pop	%4
	ld	%1,%3
} by {
	ld	%4,%2
	; peephole 87 moved %2 directly into de instead of going through %1.
	ld	%1,%3
}

replace restart {
	add	a,#0x00
	ld	%2,a
	ld	a,%3
	adc	a,%4
} by {
	; peephole 88 removed lower part of multibyte addition.
	ld	%2,a
	ld	a,%3
	add	a,%4
}

replace restart {
	ld	a, l
	add	a, #0x%1
	ld	e, a
	ld	a, h
	adc	a, #0x%2
	ld	d, a
} by {
	ld	de, #0x%2%1
	add	hl, de
	; peephole 89 used 16-bit addition.
	ld	e, l
	ld	d, h
	ld	a, h
} if notUsed('hl')

replace restart {
	ld	a, l
	add	a, #0x%1
	ld	c, a
	ld	a, h
	adc	a, #0x%2
	ld	b, a
} by {
	ld	bc, #0x%2%1
	add	hl,bc
	; peephole 90 used 16-bit addition.
	ld	c, l
	ld	b, h
	ld	a, h
} if notUsed('hl')

replace restart {
	ld	%1,a
	ld	a,%2
	add	a,%1
} by {
	; peephole 91 removed loads by exploiting commutativity of addition.
	add	a,%2
} if notVolatile(%1), notUsed(%1), canAssign('b' %2)
// canAssign('b' %2) is true, iff add a,%2 is possible.

replace restart {
	ld	%1 (ix),a
	ld	a,#%2
	add	a,%1 (ix)
} by {
	ld	%1 (ix),a
	; peephole 92 removed loads by exploiting commutativity of addition.
	add	a,#%2
}
// Don't need to check for volatile, since ix is used to access the stack.

replace restart {
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	ld	a,(hl)
	inc	a
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	ld	(hl),a
} by {
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	inc	(hl)
	; peephole 93 incremented in (hl) instead of going through a.
} if notUsed('a')

replace restart {
	ld	a,(hl)
	inc	a
	ld	(hl),a
} by {
	inc	(hl)
	; peephole 93' incremented in (hl) instead of going through a.
} if notUsed('a')

// TODO: Check for volatile?
replace restart {
	ld	%1, %2 (%3)
	inc	%1
	ld	%2 (%3), %1
} by {
	inc	%2 (%3)
	ld	%1, %2 (%3)
	; peephole 93a incremented in %2 (%3) instead of going through %1.
} if notSame(%1 'hl' 'de' 'bc')

// TODO: Check for volatile?
replace restart {
	ld	%1, %2 (%3)
	dec	%1
	ld	%2 (%3), %1
} by {
	dec	%2 (%3)
	ld	%1, %2 (%3)
	; peephole 93b decremented in %2 (%3) instead of going through %1.
} if notSame(%1 'hl' 'de' 'bc')

replace restart {
	ld	%1,a
	ld	a,%2
	add	a,%1
} by {
	ld	%1, a
	; peephole 94 removed load by exploiting commutativity of addition.
	add	a,%2
} if notSame(%2 '(bc)' '(de)'), canAssign('b' %2)
// canAssign('b' %2) is true, iff add a,%2 is possible.

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	add	hl,bc
} by {
	; peephole 95 removed loads by exploiting commutativity of addition.
	ld	bc,#%1
	add	hl,bc
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	add	hl,%2
	ld	bc,#%4
	add	hl,bc
} by {
	; peephole 96 removed loads by exploiting commutativity of addition.
	ld	hl,#%1 + %4
	add	hl,%2
} if notUsed('bc')

replace restart {
	ld	c,e
	ld	b,d
	ld	hl,#%1
	add	hl,bc
} by {
	; peephole 97 removed loads by exploiting commutativity of addition.
	ld	hl,#%1
	add	hl,de
} if notUsed('bc')

replace restart {
	or	a,%1
	jp	NZ,%2
	ld	%3,#0x00
} by {
	or	a,%1
	jp	NZ,%2
	ld	%3,a
	; peephole 98 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	and	a,%1
	jp	NZ,%2
	ld	%3,#0x00
} by {
	and	a,%1
	jp	NZ,%2
	ld	%3,a
	; peephole 99 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	sub	a,%1
	jp	NZ,%2
	ld	%3,#0x00
} by {
	sub	a,%1
	jp	NZ,%2
	ld	%3,a
	; peephole 100 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	inc	a
	jp	NZ,%1
	ld	%2,#0x00
} by {
	inc	a
	jp	NZ,%1
	ld	%2,a
	; peephole 101 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	dec	a
	jp	NZ,%1
	ld	%2,#0x00
} by {
	dec	a
	jp	NZ,%1
	ld	%2,a
	; peephole 102 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	or	a,%1
	jp	NZ,%2
	ld	a,%3
	or	a,a
} by {
	or	a,%1
	jp	NZ,%2
	or	a,%3
	; peephole 103 shortened or using a (which has just been tested to be #0x00).
} if canAssign('b' %3)
// canAssign('b' %2) is true, iff or a,%2 is possible.

replace restart {
	sub	a,%1
	jp	NZ,%2
	ld	a,%3
	or	a,a
} by {
	sub	a,%1
	jp	NZ,%2
	or	a,%3
	; peephole 104 shortened or using a (which has just been tested to be #0x00).
} if canAssign('b' %3)
// canAssign('b' %2) is true, iff or a,%2 is possible.

replace restart {
	or	a,%1
	jp	NZ,%2
	push	%3
	ld	%4,#0x00
} by {
	or	a,%1
	jp	NZ,%2
	push	%3
	ld	%4,a
	; peephole 105 replaced constant #0x00 by a (which has just been tested to be #0x00).
}

replace restart {
	ld	(hl),#0x00
	inc	hl
	ld	(hl),#0x00
} by {
	xor	a, a
	; peephole 106 cached zero in a.
	ld	(hl), a
	inc	hl
	ld	(hl), a
} if notUsed('a')

replace restart {
	ld	hl,#%1
	add	hl,%2
	inc	hl
} by {
	ld	hl,#%1+1
	add	hl,%2
	; peephole 107 moved increment of hl to constant.
}

replace restart {
	inc	hl
	ld	%1,#%2
	add	hl,%1
} by {
	ld	%1,#%2+1
	add	hl,%1
	; peephole 108 moved increment of hl to constant.
} if notUsed(%1)

replace restart {
	dec	hl
	ld	%1,#%2
	add	hl,%1
} by {
	ld	%1,#%2-1
	add	hl,%1
	; peephole 109 moved decrement of hl to constant.
} if notUsed(%1)

replace restart {
	inc	iy
	ld	%1, %2 (iy)
} by {
	ld	%1, %2+1 (iy)
	; peephole 110 moved increment of iy to offset.
} if notUsed('iy')

replace restart {
	push	hl
	pop	iy
	pop	hl
	inc	iy
} by {
	inc	hl
	push	hl
	pop	iy
	pop	hl
	; peephole 111 incremented in hl instead of iy.
}

replace restart {
	push	hl
	pop	iy
	inc	iy
} by {
	inc	hl
	push	hl
	pop	iy
	; peephole 111a incremented in hl instead of iy.
} if notUsed('hl')

replace restart {
	push	bc
	pop	iy
	inc	iy
} by {
	inc	bc
	push	bc
	pop	iy
	; peephole 111b incremented in bc instead of iy.
} if notUsed('bc')

replace restart {
	push	de
	pop	iy
	inc	iy
} by {
	inc	de
	push	de
	pop	iy
	; peephole 111c incremented in de instead of iy.
} if notUsed('de')

replace restart {
	ld	hl,%1
	add	hl,%2
	push	hl
	pop	iy
} by {
	ld	iy,%1
	add	iy,%2
	; peephole 111b added in iy instead of hl.
} if notUsed('hl'), notSame(%2 'hl')

replace restart {
	pop	af
	ld	sp,%1
} by {
	; peephole 112 removed redundant pop af.
	ld	sp,%1
} if notUsed('a')

replace restart {
	inc	sp
	ld	sp,%1
} by {
	; peephole 113 removed redundant inc sp.
	ld	sp,%1
} if notUsed('a')

replace restart {
	call    %1
	ret
} by {
	jp  %1
	; peephole 114 replaced call at end of function by jump (tail call optimization).
} if symmParmStack(%1)

// Callee saves ix.
replace restart {
	call	%1
	pop	ix
	ret
} by {
	pop	ix
	jp	%1
	; peephole115 replaced call at end of function by jump moving call beyond pop ix (tail call optimization).
} if symmParmStack(%1), notSame(%1 '____sdcc_cpu_pop_ei'), notSame(%1 '___sdcc_enter_ix')

replace restart {
	ld	%1,#%2
	ld	%3,%4
	ld	%1,#%2
} by {
	ld	%1,#%2
	ld	%3,%4
	; peephole 116 removed load of #%2 into %1 since it's still there.
} if notVolatile(%1), operandsNotRelated(%3 %1)

replace restart {
	ld	hl,#%1
	ld	de,#%1
} by {
	; peephole 117 used #%1 from hl for load into de.
	ld	hl,#%1
	ld	e,l
	ld	d,h
}

replace restart {
	ld	%1 (ix),l
	ld	%2 (ix),h
	ld	%3,%1 (ix)
	ld	%4,%2 (ix)
} by {	
	ld	%1 (ix),l
	ld	%2 (ix),h
	; peephole 118 used hl instead of %2 (ix), %1 (ix) to load %4%3.
	ld	%3,l
	ld	%4,h
} if operandsNotRelated('h' %3)
// Don't check for volatile since ix points to the stack.

replace restart {
	ld	%1, a
	ld	a, %2 (%3)
	adc	a, #%4
	ld	%6, %1
} by {
	ld	%6, a
	ld	a, %2 (%3)
	adc	a, #%4
	; peephole 119 loaded %6 from a directly instead of going through %1.
} if notUsed(%1), notSame(%6 'a')

replace restart {
	ld	%1, a
	ld	a, %2 (%3)
	adc	a, #%4
	ld	%5, a
	ld	%6, %1
} by {
	ld	%6, a
	ld	a, %2 (%3)
	adc	a, #%4
	ld	%5, a
	; peephole 120 loaded %6 from a directly instead of going through %1.
} if notUsed(%1), notSame(%5 %1), notSame(%5 '(hl)' '(de)' '(bc)'), notSame(%5 %6), notSame(%6 '(hl)' '(de)' '(bc)'), notSame(%5 'a'), notSame(%6 'a')

replace restart {
	ld	%1, a
	ld	a, #%2
	adc	a, #%3
	ld	%5, a
	ld	%6, %1
} by {
	ld	%6, a
	ld	a, #%2
	adc	a, #%3
	ld	%5, a
	; peephole 121 loaded %6 from a directly instead of going through %1.
} if notUsed(%1), notSame(%5 %1), notSame(%5 %6 '(hl)' '(de)' '(bc)'), notSame(%6 'a')

replace restart {
	ld	hl, #%1
	add	hl, %2
	ex	de, hl
	ld	hl, #%3
	add	hl, de
} by {
	ld	hl, #%1+%3
	add	hl, %2
	; peephole 122 removed addition and loads exploiting commutativity of addition.
} if notUsed('de')

replace restart {
	ld	%1,l
	ld	%2,h
	ex	de,hl
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
} by {
	ld	%1,l
	ex	de,hl
	; peephole 122a used de instead of going through %1%2.
	ld	(hl),e
	inc	hl
	ld	(hl),d
} if notUsed(%2), notSame(%1 'l' 'h' 'e' 'd'), notSame(%2 'l' 'h' 'e' 'd')
	
replace restart {
	ld	e, l
	ld	d, h
	ld	hl, #0x0001
	add	hl, de
} by {
	ld	e, l
	ld	d, h
	inc	hl
	; peephole 123 replaced addition by increment.
}

replace restart {	
	ld      sp,hl
	ld      hl,#0x0002
	add     hl,sp
} by {
	ld	sp, hl
	inc	hl
	inc	hl
	; peephole 124 replaced addition by increment.
}

replace restart {
	ex	de, hl
	ld	hl, #%1
	add	hl, de
} by {
	; peephole 125 removed ex exploiting commutativity of addition.
	ld	de, #%1
	add	hl, de
} if notUsed('de')

replace restart {
	ex	de, hl
	push	bc
	ex	de, hl
} by {
	push	bc
	; peephole 126 canceled subsequent ex de, hl.
}

replace restart {
	ld	hl, #%1
	add	hl, %2
	ex	de, hl
	inc	de
} by {
	ld	hl, #%1+1
	; peephole 127 moved increment to constant.
	add	hl, %2
	ex	de, hl
} if notUsed('hl')

replace restart {
	ld	a,#0x01
	jp	%1
%2:
	xor	a,a
%1:
	sub	a,#0x01
	ld	a,#0x00
	rla
} by {
	xor	a,a
	jp	%1
%2:
	ld	a,#0x01
%1:
	; peephole 128 removed negation.
} if labelRefCount(%1 1)

replace restart {
	and	a,#0x01
	sub	a,#0x01
	ld	a,#0x00
	rla
} by {
	and	a,#0x01
	xor	a,#0x01
	; peephole 129 used xor for negation.
}

replace restart {
	or	a,a
	sub	a,#%1
} by {
	; peephole 130 removed redundant or.
	sub	a,#%1
}

replace restart {
	ld	a,#0x00
	rla
	sub	a,#0x01
	ld	a,#0x00
	rla
} by {
	ld	a,#0x00
	ccf
	; peephole 131 moved negation from bit 0 to carry flag.
	rla
}

replace restart {
	ld	a, #<(%1)
	add	a, l
	ld	l, a
	ld	a, #>(%1)
	adc	a, h
	ld	h, a
	push	bc
} by {
	push	bc
	ld	bc, #%1
	add	hl, bc
	; peephole 132 used 16 bit addition by moving push bc
	ld	a, h
} if notUsed('bc')

replace restart {
	pop	af
	push	hl
} by {
	; peephole 133 used ex to move hl onto the stack.
	ex	(sp),hl
} if notUsed('a'), notUsed('hl')

replace restart {
	pop	af
	ld	hl, #%1
	push	hl
} by {
	ld	hl, #%1
	; peephole 134 used ex to move hl onto the stack.
	ex	(sp),hl
} if notUsed('a'), notUsed('hl')

replace restart {
	pop	af
	inc	sp
	ld	hl,#%1
	push	hl
} by {
	inc	sp
	ld	hl,#%1
	; peephole 135 used ex to move #%1 onto the stack.
	ex	(sp),hl
} if notUsed('a'), notUsed('hl')

replace restart {
	pop	af
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	h,#%1
	ex	(sp),hl
	; peephole 136 used ex to move #%1 onto the stack.
	inc	sp
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	%1,#%2
	ld	%3 (%1),a
%4:
	ld	%1,%5
} by {
	ld	(#%2 + %3),a
	; peephole 137 directly used #%2 instead of going through %1 using indirect addressing.
%4:
	ld	%1,%5
}

replace restart {
	pop	af
	ld	%1,#%2
	ld	%3 (%1),%4
	ld	%1,#%5
} by {
	ld	a,%4
	ld	(#%2 + %3),a
	; peephole 138 used #%2 directly instead of going through %1 using indirect addressing.
	pop	af
	ld	%1,#%5
} if notSame(%3 'a')

replace restart {
	ld	%1,a
	bit	%2,%1
} by {
	bit	%2,a
	; peephole 139 tested bit %2 of a directly instead of going through %1.
} if notUsed(%1)

replace restart {
	sbc	a,%1
	bit	7,a
	jp	Z,%2
} by {
	sbc	a,%1
	jp	P,%2
	; peephole 140 used sign flag instead of testing bit 7.
}

replace restart {
	sbc	a,%1
	bit	7,a
	jp	NZ,%2
} by {
	sbc	a,%1
	jp	M,%2
	; peephole 141 used sign flag instead of testing bit 7.
}

replace restart {
	dec %1
	ld	a, %1
	or	a, a
} by {
	dec %1
	; peephole 141a removed redundant transfer and flag setting in a
} if notUsed('a')

replace restart {
	ld	%1,a
	or	a,a
	jp	%3,%4
	ld	a,%1
} by {
	ld	%1,a
	or	a,a
	jp	%3,%4
	; peephole 142 used value still in a instead of reloading from %1.
}

replace restart {
	jp	%5
	ret
} by {
	jp	%5
	; peephole 143 removed unused ret.
}

replace restart {
	jp	%5
	ld	sp,ix
	pop	ix
	ret
} by {
	jp	%5
	; peephole 144 removed unused ret.
}

replace restart {
	or	a,%1
	jp	NZ,%2
	xor	a,a
	jp	%3
} by {
	or	a,%1
	jp	NZ,%2
	; peephole 145 removed redundant zeroing of a (which has just been tested to be #0x00).
	jp	%3
}


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Z88DK SPECULATIVE SUBSTITUTIONS APPLIED TO SDCC FOR #9477
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	de,#%2
	ld	bc,#%3
	dec	hl
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
	push	hl
	ld	hl,#%1
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
	push	hl
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	ld	a,l
	ld	de,#%2
	ld	bc,#%3
	; peephole z88dk-1a  Replace Monolithic Block
}
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	dec	hl
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
	ld	hl,#%1
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-1b  Replace Monolithic Block
}
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	de,#%2
	dec	hl
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
	ld	hl,#%1
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
	push	hl
	push	de
} by {
	ld	c,e
	ld	b,d
	ld	a,l
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	ld	de,#%2
	push	de
	; peephole z88dk-1c  Replace Monolithic Block
}
// if notVolatile

replace restart {
	ld	hl,#%1
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
	inc	hl
	ld	(hl),#0x%2
	inc	hl
	ld	(hl),#0x%3
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1),hl
	ld	hl,#0x%3%2
	ld	(#%1 + 2),hl
	; peephole z88dk-4  Store 2x16bit statics
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} by {
	ld	hl,(#%1)
	push	hl
	ld	hl,#%1 + 1
	; peephole z88dk-5a  Use hl to load parameter from memory
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	ld	e, (hl)
	inc	hl
	ld	d, (hl)
	push	de
} by {
	ld	hl,(#%1)
	push	hl
	ld	hl,#%1 + 1
	; peephole z88dk-5b  Use hl to load parameter from memory
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
} by {
	ld	hl,(#%1)
	ld	a,l
	; peephole z88dk-6a  Load 16-bit static directly through hl
} 

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
} by {
	ld	hl,(#%1 + %2)
	ld	a,l
	; peephole z88dk-6b  Load 16-bit static directly through hl
}

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	; peephole z88dk-8a  Copy bytes using 16-bit ops
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	ex	de,hl
	; peephole z88dk-8b  Copy bytes using 16-bit ops
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
} by {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	pop	hl
	; peephole z88dk-8c  Copy bytes using 16-bit ops
}

replace restart {
	ld	a,(#%1 + 2)
	ld	(#%2 + 2),a
	ld	a,(#%1 + 3)
	ld	(#%2 + 3),a
} by {
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	; peephole z88dk-8d  Copy bytes using 16-bit ops
} if notUsed('hl')

replace restart {
	ld	a,(#%1 + 2)
	ld	(#%2 + 2),a
	ld	a,(#%1 + 3)
	ld	(#%2 + 3),a
} by {
	ex	de,hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	ex	de,hl
	; peephole z88dk-8e  Copy bytes using 16-bit ops
} if notUsed('de')

replace restart {
	ld	a,(#%1 + 2)
	ld	(#%2 + 2),a
	ld	a,(#%1 + 3)
	ld	(#%2 + 3),a
} by {
	push	hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	pop	hl
	; peephole z88dk-8f  Copy bytes using 16-bit ops
}

replace restart {
	ld	d,l
	ld	e,h
	ld	hl,#%1
	ld	(hl),d
	inc	hl
	ld	(hl),e
	dec	hl
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} by {
	ld	(#%1),hl
	push	hl
	ld	c,l
	ld	b,h
	ld	d,l
	ld	e,h
	ld	hl,#%1 + 1
	; peephole z88dk-9  Store hl to memory directly
} 
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	dec	hl
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
	ld	hl,(#%1)
	push	hl
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	ld	c,e
	ld	b,d
	; peephole z88dk-10  Store dehl to memory directly
} 
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	b,l
	ld	c,h
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	hl,#%1 + 3
	; peephole z88dk-11  Store dehl to memory directly
} 

replace restart {
	ld	d,l
	ld	e,h
	ld	hl,#%1
	ld	(hl),d
	inc	hl
	ld	(hl),e
	ld	de,#%2
	dec	hl
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} by {
	ld	(#%1),hl
	push	hl
	ld	c,l
	ld	b,h
	ld	de,#%2
	ld	hl,#%1 + 1
	; peephole z88dk-11.5  Store hl to memory directly
}
// if notVolatile

replace restart {
	ld	d,l
	ld	e,h
	ld	hl,#%1
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	ld	(#%1),hl
	ld	d,l
	ld	e,h
	ld	hl,#%1 + 1
	; peephole z88dk-12  Store hl to memory directly
} 

replace restart {
	ld	hl,#%1 + 0
	ld	(hl), #0x%2
	ld	hl,#%1 + 1
	ld	(hl), #0x%3
	ld	hl,#%1 + 2
	ld	(hl), #0x%4
	ld	hl,#%1 + 3
	ld	(hl), #0x%5
} by {
	ld	hl,#0x%3%2
	ld	(#%1),hl
	ld	hl,#0x%5%4
	ld	(#%1 + 2),hl
	ld	hl,#%1 + 3
	; peephole z88dk-13  Write 32-bit static with 16-bit stores
}

replace restart {
	ld	hl,#%1 + 0
	ld	(hl), #0x%2
	ld	hl,#%1 + 1
	ld	(hl), #0x%3
} by {
	ld	hl,#0x%3%2
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-14  Write 16bit static with 16bit store
} 

replace restart {
	ex	de, hl
	push	hl
	push	de
} by {
	push	de
	push	hl
	; peephole z88dk-15  Eliminate unnecessary 'ex de,hl'
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	iy,#0
	add	iy,sp
	ld	3 (iy),d
	ld	2 (iy),e
	ld	1 (iy),h
	ld	0 (iy),l
	ld	de, #%1
	ld	hl, #0
	add	hl, sp
	ld	bc, #4
	ldir
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	; peephole z88dk-16  Write long static using 16bit stores instead of iy indexing
} if notUsed('bc'), notUsed('de'), notUsed('hl'), notUsed('iy')

replace restart {
	ld	de, #%1
	ld	hl, #0
	add	hl, sp
	ld	bc, #4
	ldir
} by {
	pop	hl
	pop	de
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	; peephole z88dk-17  Replace ldir of long from top of stack with 16bit stores
} if notUsed('bc'), notUsed('de'), notUsed('hl')

replace restart {
	ld	de, #%1
	ld	hl, #%2
	ld	bc, #4
	ldir
} by {
	ld	hl,(#%2)
	ld	(#%1),hl
	ld	hl,(#%2 + 2)
	ld	(#%1 + 2),hl
	; peephole z88dk-18  Replace ldir used to copy long with 16bit loads and stores
} if notUsed('bc'), notUsed('de'), notUsed('hl')

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	b,l
	ld	c,h
	ld	hl,#%1 + 3
	; peephole z88dk-19  Write long static using 16bit stores
}

replace restart {
	ex	de, hl
	ld	bc,#%1
	push	hl
	push	de
} by {
	ld	bc,#%1
	push	de
	push	hl
	; peephole z88dk-20  Eliminate unnecessary 'ex de,hl'
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	bc,#%0
	push	de
} by {
	ld	bc,#%0
	push	hl
	; peephole z88dk-21  Eliminate unnecessary 'ex de,hl'
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	l, c
	ld	h, b
	ld	(#%1),hl
} by {
	ld	(#%1),bc
	; peephole z88dk-23  Write bc to memory directly rather than first loading into hl
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),#0x%2
	inc	hl
	ld	(hl),#0x%3
	inc	hl
	ld	(hl),#0x%4
	inc	hl
	ld	(hl),#0x%5
} by {
	ld	hl,#0x%3%2
	ld	(#%1),hl
	ld	hl,#0x%5%4
	ld	(#%1 + 2),hl
	ld	hl,#%1 + 3
	; peephole z88dk-24  Write 32bit const using 16bit stores
}

replace restart {
	ld	hl,#%1
	ld	(hl),#0x%2
	inc	hl
	ld	(hl),#0x%3
} by {
	ld	hl,#0x%3%2
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-25  Write 16bit const using 16bit store
}

replace restart {
	ld	c,l
	ld	b,h
	ld	de,#%1
	push	bc
} by {
	ld	de,#%1
	push	hl
	; peephole z88dk-26  Eliminate unnecessary load of hl into bc
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
	inc	hl
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1),hl
	ld	(#%1 + 2),hl
	ld	hl,#%1 + 3
	; peephole z88dk-27  Write 0s using 16bit stores
} 

replace restart {
	ld	hl,#%1
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1),hl
	; peephole z88dk-28a  Write 0 using 16bit store
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1 + %2),hl
	; peephole z88dk-28b  Write 0 using 16bit store
} if notUsed('hl')

replace restart {
	ld	e,l
	ld	d,h
	ld	bc,#%1
	push	de
	push	bc
} by {
	push	hl
	ld	bc,#%1
	push	bc
	; peephole z88dk-29  Eliminate unnecessary load of hl into de
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	push	hl
	ld	hl,#%2
	push	hl
	push	de
	push	bc
} by {
	ld	bc,#%1
	push	bc
	ld	bc,#%2
	push	bc
	push	de
	push	hl
	; peephole z88dk-30
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	hl,#%1 + 2
	ld	c, (hl)
	inc	hl
	ld	b, (hl)
	push	bc
} by {
	ld	hl,(#%1 + 2)
	push	hl
	ld	hl,#%1 + 3
	; peephole z88dk-32
} if notUsed('bc')

replace restart {
	ld	(#%1),hl
	ld	de,#%2
	ld	hl,(#%1)
} by {
	ld	(#%1),hl
	ld	de,#%2
	; peephole z88dk-33
}
// if notVolatile

replace restart {
	ld	hl,#%1
	ld	(hl),a
	ld	d,(hl)
	ld	a,(hl)
} by {
	ld	(#%1),a
	ld	d,a
	ld	hl,#%1
	; peephole z88dk-34
} 
// if notVolatile

replace restart {
	ld	a,l
	ld	(#%1 + %2),a
	pop	af
} by {
	pop	af
	ld	a,l
	ld	(#%1 + %2),a
	; peephole z88dk-35
} if notUsed('a')

replace restart {
	ld	(#%1 + %2),a
	ld	iy,#%1
	ld	l,%2 (iy)
	ld	a,(#%1 + %2)
} by {
	ld	(#%1 + %2),a
	ld	l,a
	; peephole z88dk-36
} if notUsed('iy')
// if notVolatile

replace restart {
	ld	a,l
	ld	(#%1 + %2),a
	ld	l,a
} by {
	ld	a,l
	ld	(#%1 + %2),a
	; peephole z88dk-37
}

replace restart {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	iy,#%1
	ld	l,0 (iy)
	ld	iy,#%1
	ld	h,1 (iy)
	ld	iy,#%1
	ld	e,2 (iy)
	ld	iy,#%1
	ld	d,3 (iy)
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	; peephole z88dk-38
} if notUsed('iy')
// if notVolatile

replace restart {
	ld	iy,#%1
	ld	l,0 (iy)
	ld	iy,#%1
	ld	h,1 (iy)
	ld	iy,#%1
	ld	e,2 (iy)
	ld	iy,#%1
	ld	d,3 (iy)
} by {
	ld	hl,(#%1)
	ld	de,(#%1 + 2)
        ; peephole z88dk-39
} if notUsed('iy')

replace restart {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	de,#%2
	ld	hl,(%1 + 2)
	push	hl
	ld	hl,(%1)
	push	hl
	push	de
} by {
	ld	(#%1),hl
	ld	(#%1 + 2),de
	push	de
	push	hl
	ld	de,#%2
	push	de
	; peephole z88dk-40
}

replace restart {
	ld	c, l
	ld	b, h
	ld	hl,#%1
	add	hl,sp
	ld	sp,hl
	ld	(#%2),bc
} by {
	ld	c,l
	ld	b,h
	ld	(#%2),hl
	ld	hl,#%1
	add	hl,sp
	ld	sp,hl
	; peephole z88dk-41
} 

replace restart {
	call	%1
	ld	iy,#%2
	add	iy,sp
	ld	sp,iy
	ld	(%3),hl
} by {
	call	%1
	ld	(%3),hl
	ld	hl,#%2
	add	hl,sp
	ld	sp,hl
	; peephole z88dk-42
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	iy,#0
	add	iy,sp
	ld	3 (iy),d
	ld	2 (iy),e
	ld	1 (iy),h
	ld	0 (iy),l
	pop	hl
	pop	de
} by {
	; peephole z88dk-43
} if notUsed('iy')

replace restart {
	ld	iy,(%1)
	ld	de,(%2)
	add	iy, de
	ld	hl,#%3
	push	hl
	ld	hl,#%4
	push	hl
	ld	hl,#%5
	push	hl
	push	iy
} by {
	ld	hl,(%1)
	ld	de,(%2)
	add	hl,de
	ex	de,hl
	ld	hl,#%3
	push	hl
	ld	hl,#%4
	push	hl
	ld	hl,#%5
	push	hl
	push	de
	; peephole z88dk-44
} if notUsed('iy'), notUsed('de')

replace restart {
	ld	iy,#%1
	push	iy
	pop	de
} by {
	ld	de,#%1
	; peephole z88dk-45
} if notUsed('iy')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	e,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ex	de,hl
	ld	a,d
	ld	hl,#%2 + 1
	; peephole z88dk-46
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-47a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-47b
} if notUsed('bc')

replace restart {
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
	inc	hl
	xor	a, a
} by {
	xor	a, a
	ld	(hl), a
	inc	hl
	ld	(hl), a
	inc	hl
	; peephole z88dk-48
}

replace restart {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),h
	ld	%4 (ix), l
	ld	e, l
	ld	d,%3 (ix)
	ld	c,%2 (ix)
	ld	b,%1 (ix)
	bit	7, %1 (ix)
} by {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),h
	ld	%4 (ix),l
	ld	c,e
	ld	b,d
	ld	e,l
	ld	d,h
	bit	7,b
	; peephole z88dk-49
} 
// if notVolatile

replace restart {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),b
	ld	a,c
	and	a, #%4
	ld	%5 (ix),a
	ld	a,#%6
	cp	a, %1 (ix)
	ld	a,#%7
	sbc	a, %2 (ix)
	ld	a,#%8
	sbc	a, %3 (ix)
} by {
	ld	%1 (ix),d
	ld	%2 (ix),e
	ld	%3 (ix),b
	ld	a,c
	and	a, #%4
	ld	%5 (ix),a
	ld	a,#%6
	cp	a, d
	ld	a,#%7
	sbc	a, e
	ld	a,#%8
	sbc	a, b
	; peephole z88dk-51
}
// if notVolatile

replace restart {
	ld	l, %5 (ix)
	ld	h, %6 (ix)
	ld	de, #%7
	add	hl, de
	ld	a,(hl)
	ld	%1 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%2 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%3 (ix),a
	inc	hl
	ld	a,(hl)
	ld	%4 (ix),a
} by {
	push	ix
	pop	hl
	ld	de,#%1
	add	hl,de
	ex	de,hl
	ld	l, %5 (ix)
	ld	h, %6 (ix)
	ld	bc,#%7
	add	hl,bc
	ld	bc,#0x0004
	ldir
	dec	hl
	ld	a,(hl)
	; peephole z88dk-52  Warning may lead to incorrect code
} if notUsed('bc'), notUsed('de')

replace restart {
	ld	b,l
	ld	c,h
	ld	a,%1 (ix)
	add	a, b
	ld	%1 (ix),a
	ld	a,%2 (ix)
	adc	a, c
	ld	%2 (ix),a
	ld	a,%3 (ix)
	adc	a, e
	ld	%3 (ix),a
	ld	a,%4 (ix)
	adc	a, d
	ld	%4 (ix),a
} by {
	ld	c,%1 (ix)
	ld	b,%2 (ix)
	add	hl,bc
	ld	%1 (ix),l
	ld	%2 (ix),h
	ld	l,%3 (ix)
	ld	h,%4 (ix)
	adc	hl,de
	ld	%3 (ix),l
	ld	%4 (ix),h
	ld	a,h
	; peephole z88dk-53
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	%1 (ix),%3
	ld	%2 (ix),%4
	ld	%3,%1 (ix)
	ld	%4,%2 (ix)
} by {
	ld	%1 (ix),%3
	ld	%2 (ix),%4
	; peephole z88dk-55
}
// if notVolatile

replace restart {
	ld	%5 (ix), l
	ld	%6 (ix), h
	ld	%7 (ix),e
	ld	%8 (ix),d
	bit	%2, %3
	jp	%4,%1
	ld	h,%5 (ix)
	ld	l,%6 (ix)
	ld	d,%7 (ix)
	ld	e,%8 (ix)
} by {
	ld	%5 (ix),l
	ld	%6 (ix),h
	ld	%7 (ix),e
	ld	%8 (ix),d
	bit	%2, %3
	jp	%4,%1
	ld	a,h
	ld	h,l
	ld	l,a
	ld	a,d
	ld	d,e
	ld	e,a
	; peephole z88dk-56
} 

replace restart {
	ld	b,l
	ld	c,h
	pop	de
	ld	a,c
	or	a,b
	jp	%2,%1
} by {
	ld	b,l
	ld	c,h
	pop	de
	ld	a,h
	or	a,l
	jp	%2,%1
	; peephole z88dk-57
}

replace restart {
	ld	%1 (ix),h
	ld	%2 (ix),l
	pop	de
	pop	bc
	ld	a,%1 (ix)
	or	a,%2 (ix)
	jp	%4,%3
} by {
	ld	%1 (ix),h
	ld	%2 (ix),l
	pop	de
	pop	bc
	ld	a,h
	or	a,l
	jp	%4,%3
	; peephole z88dk-59
}
// if notVolatile

replace restart {
	ld	%1,%3 (ix)
	ld	%2,%3 (ix)
} by {
	ld	%1,%3 (ix)
	ld	%2,%1
	; peephole z88dk-61
}
// if notVolatile

replace restart {
	ld	d,a
	ld	a,c
	or	a, b
	or	a, e
	or	a, d
} by {
	ld	d,a
	or	a, c
	or	a, b
	or	a, e
	; peephole z88dk-64
}

replace restart {
	ld	b,l
	ld	c,h
	ld	%1 (ix),b
	ld	%2 (ix),c
	ld	%3 (ix),e
	ld	%4 (ix),d
} by {
	ld	b,l
	ld	c,h
	ld	%1 (ix),l
	ld	%2 (ix),h
	ld	%3 (ix),e
	ld	%4 (ix),d
	; peephole z88dk-66
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	dec	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	push	bc
	push	de
} by {
	ld	c,l
	ld	b,h
	push	hl
	ld	hl,(#%1)
	push	hl
	ld	e,l
	ld	d,h
	ld	hl,#%1 + 1
	; peephole z88dk-67
} 

replace restart {
	ld	%4 (ix),l
	ld	%3 (ix),h
	ld	%2 (ix),e
	ld	%1 (ix),d
	ld	l,%2 (ix)
	ld	h,%1 (ix)
	push	hl
	ld	l,%4 (ix)
	ld	h,%3 (ix)
	push	hl
} by {
	ld	%4 (ix),l
	ld	%3 (ix),h
	ld	%2 (ix),e
	ld	%1 (ix),d
	push	de
	push	hl
	; peephole z88dk-68
} 
// if notVolatile

replace restart {
	ld	%4 (ix),c
	ld	%3 (ix),b
	ld	%2 (ix),e
	ld	%1 (ix),d
	push	af
	ld	a,%4 (ix)
	ld	%8 (ix),a
	ld	a,%3 (ix)
	ld	%7 (ix),a
	ld	a,%2 (ix)
	ld	%6 (ix),a
	ld	a,%1 (ix)
	ld	%5 (ix),a
	pop	af
} by {
	ld	%4 (ix),c
	ld	%3 (ix),b
	ld	%2 (ix),e
	ld	%1 (ix),d
	ld	%8 (ix),c
	ld	%7 (ix),b
	ld	%6 (ix),e
	ld	%5 (ix),d
	; peephole z88dk-69
}
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	pop	de
	ld	l, b
	ld	h, c
} by {
	ld	b,l
	ld	c,h
	pop	de
	; peephole z88dk-71
}

replace restart {
	ld	de, (#%1 + %2)
	ld	hl, (#%3 + %4)
	ld	a,e
	sub	a, l
	ld	e,a
	ld	a,d
	sbc	a, h
	ld	d,a
} by {
	ld	hl, (#%1 + %2)
	ld	de, (#%3 + %4)
	xor	a,a
	sbc	hl,de
	ex	de,hl
	ld	a,d
	; peephole z88dk-72
}

replace restart {
	push	%1
	pop	%1
} by {
	; peephole z88dk-73 Remove push %1 / pop %1 pair
}

replace restart {
	ld	%1,%2 (%3)
	ld	%2 (%3),%1
} by {
	ld	%1,%2 (%3)
	; peephole z88dk-75a
}
// if notVolatile

replace restart {
	ld	%1 (%6),%3
	ld	%4,%2 (%6)
	ld	%5,%1 (%6)
} by {
	ld	%4,%2 (%6)
	ld	%1 (%6),%3
	ld	%5,%3
	; peephole z88dk-75b
} if notSame(%1 %2), notSame(%3 %4)
// notVolatile

replace restart {
	ld	a,%2 (%4)
	ld	%1,%3 (%4)
} by {
	ld	%1,%3 (%4)
	ld	a,%2 (%4)
	; peephole z88dk-75c
} if notSame(%1 'a')

replace restart {
	ld	iy,#%1
	ld	0 (iy),h
	ld	iy,#%1
	ld	1 (iy),l
	ld	iy,#%1
	sra	1 (iy)
	ld	iy,#%1
	rr	0 (iy)
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	sra	h
	rr	l
	ld	(#%1),hl
	; peephole z88dk-76
} if notUsed('iy'), notUsed('a'), notUsed('hl')

replace restart {
	ld	iy,#%1
	ld	0 (iy),h
	ld	iy,#%1
	ld	1 (iy),l
} by {
	ld	a,l
	ld	l,h
	ld	h,a
	ld	(#%1),hl
	; peephole z88dk-77
} if notUsed('iy'), notUsed('a'), notUsed('hl')

replace restart {
	ld	a,(#%1 + 1)
	ld	hl,#%1 + 0
	or	a,(hl)
} by {
	ld	hl,(#%1)
	ld	a,h
	or	a,l
	; peephole z88dk-78
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	dec	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	sla	e
	rl	d
} by {
	ld	hl,(#%1 + %2 - 1)
	add	hl,hl
	ex	de,hl
	ld	hl,#%1 + %2
	; peephole z88dk-79
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	jp	NZ,%3
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sub	a, (hl)
	jp	Z,%4
%3:
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	jp	Z,%4
%3:
	; peephole z88dk-80  Warning may lead to incorrect code
} if notUsed('a'), notUsed('de'), notUsed('hl')

replace restart {
	jp	%1
%1:
} by {
%1:
	; peephole z88dk-81
}
// if decrement label count

replace restart {
	ld	a,(#%1 + 0)
	ld	iy,#%2
	sub	a, 0 (iy)
	jp	NZ,%3
	ld	a,(#%1 + 1)
	ld	iy,#%2
	sub	a, 1 (iy)
	jp	Z,%4
%3:
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	jp	Z,%4
%3:
	; peephole z88dk-82  Warning may lead to incorrect code
} if notUsed('a'), notUsed('de'), notUsed('hl'), notUsed('iy')

replace restart {
	ld	hl,#%1 + %2
	dec	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	de,(#%1 + %2 - 1)
	ld	hl,#%1 + %2
	; peephole z88dk-83
}

replace restart {
	ex	de,hl
	sla	e
	rl	d
} by {
	add	hl,hl
	ex	de,hl
	; peephole z88dk-84
}

replace restart {
	ld	b,l
	ld	c,h
	bit	7, c
	jp	Z,%1
	ld	l, b
	ld	h, c
} by {
	ld	b,l
	ld	c,h
	bit	7, c
	jp	Z,%1
	; peephole z88dk-86
}

replace restart {
	ex	de,hl
	ld	((%1 + %2)), de
} by {
	ld	((%1 + %2)),hl
	ex	de,hl
	; peephole z88dk-87
}

replace restart {
	ex	de,hl
	ld	((%1 - %2)), de
} by {
	ld	((%1 - %2)),hl
	ex	de,hl
	; peephole z88dk-88
}

replace restart {
	add	hl,%2
	ld	c,h
	bit	7, c
	jp	Z,%1
} by {
	add	hl,%2
	ld	c,h
	jp	P,%1
	; peephole z88dk-89a
} 

replace restart {
	add	hl, %1
	ld	b,l
	ld	c,h
	bit	7, h
	jp	Z,%2
} by {
	add	hl, %1
	ld	b,l
	ld	c,h
	jp	P,%2
	; peephole z88dk-89b
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	%3 (ix),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	%4 (ix),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	%3 (ix),l
	ld	%4 (ix),h
	ld	a,h
	; peephole z88dk-91a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(#%2 + 0)
	sub	a, (hl)
	ld	%3 (ix),a
	ld	a,(#%2 + 1)
	inc	hl
	sbc	a, (hl)
	ld	%4 (ix),a
} by {
	ld	hl,(#%2)
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	%3 (ix),l
	ld	%4 (ix),h
	ld	a,h
	; peephole z88dk-91b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	e,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ex	de,hl
	ld	a,d
	; peephole z88dk-92a
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(#%2 + 0)
	sub	a, (hl)
	ld	e,a
	ld	a,(#%2 + 1)
	inc	hl
	sbc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%2)
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ex	de,hl
	ld	a,d
	; peephole z88dk-92b
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	jp	NZ,%3
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sub	a, (hl)
	jp	NZ,%3
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	jp	NZ,%3
	; peephole z88dk-93a  Warning may lead to incorrect code
} if notUsed('a'), notUsed('bc'), notUsed('hl')

replace restart {
	ld	a,(#%1 + 0)
	ld	iy,#%2
	sub	a, 0 (iy)
	jp	NZ,%5
	ld	a,(#%1 + 1)
	ld	iy,#%2
	sub	a, 1 (iy)
	jp	NZ,%5
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	jp	NZ,%5
	; peephole z88dk-93b  Warning may lead to incorrect code
} if notUsed('a'), notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc, (#(%1 + %2) + %3)
	ld	hl, (#(%4 + %5) + %6)
	ld	a,c
	sub	a, l
	ld	l,a
	ld	a,b
	sbc	a, h
	ld	h,a
} by {
	ld	hl, (#(%1 + %2) + %3)
	ld	bc, (#(%4 + %5) + %6)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	; peephole z88dk-94a
} if notUsed('bc')

replace restart {
	ld	de,(#%1 + %2 - %2)
} by {
	ld	de,(#%1)
	; peephole z88dk-95a
}

replace restart {
	ld	hl,(#%1 + %2 - %2)
} by {
	ld	hl,(#%1)
	; peephole z88dk-95b
}

replace restart {
	ld	bc,(#%1 + %2 - %2)
} by {
	ld	bc,(#%1)
	; peephole z88dk-95c
}

replace restart {
	ld	de,(#%1)
	ld	a,(de)
} by {
	ld	hl,(#%1)
	ld	a,(hl)
	; peephole z88dk-96a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	bc,(#%1)
	ld	a,(bc)
} by {
	ld	hl,(#%1)
	ld	a,(hl)
	; peephole z88dk-96b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	dec	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	de,(#%1 + %2 - 1)
	ld	hl,#%1 + %2
	; peephole z88dk-97
} 

replace restart {
	ld	de, (#%1 + %2)
	ld	((%3 + %4)), de
} by {
	ld	hl, (#%1 + %2)
	ld	((%3 + %4)), hl
        ; peephole z88dk-98a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	bc, (#%1 + %2)
	ld	((%3 + %4)), bc
} by {
	ld	hl, (#%1 + %2)
	ld	((%3 + %4)), hl
        ; peephole z88dk-98b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	(#%1),de
	ld	hl,#%1 + 1
	; peephole z88dk-99
} 

replace restart {
	ld	d,l
	ld	e,h
	pop	hl
	push	hl
	ld	(hl),d
	inc	hl
	ld	(hl),e
	ld	hl,#%1
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	ld	e,l
	ld	d,h
	pop	hl
	push	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	(#%1),de
	; peephole z88dk-100
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,l
	ld	d,h
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	(hl),d
} by {
	ld	a,l
	ld	d,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-101
} 

replace restart {
	ld	iy,#%1
	ld	l,%2 (iy)
	ld	h,#0x00
} by {
	ld	hl,(#%1 + %2)
	ld	h,#0x00
	; peephole z88dk-102
} if notUsed('iy')


replace restart {
	ld	hl,#%1 + %2
	ld	e, (hl)
	ld	d,#0x00
} by {
	ld	de,(#%1 + %2)
	ld	d,#0x00
	; peephole z88dk-103
} if notUsed('hl')

replace restart {
	ld	de,(%1)
	ld	l, e
	ld	h, d
} by {
	ld	hl,(%1)
	ld	e,l
	ld	d,h
	; peephole z88dk-104
} 

replace restart {
	ld	iy,#%1
	inc	0 (iy)
	ld	a,(#%1 + 0)
} by {
	ld	a,(#%1)
	inc	a
	ld	(#%1),a
	; peephole z88dk-105
} if notUsed('iy')

replace restart {
	ld	hl,#%1
	ld	d,(hl)
	ld	e,#0x00
	ld	l, d
	ld	h, e
} by {
	ld	hl,(#%1)
	ld	h,#0x00
	ld	d,l
	ld	e,h
	; peephole z88dk-106
} 

replace restart {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-107
} if notUsed('de')

replace restart {
	xor	a, a
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	(hl),a
	inc	hl
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1),hl
	ld	(#%1 + 2),hl
	ld	hl,#%1 + 3
	; peephole z88dk-108
} 

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	; peephole z88dk-109
} if notUsed('hl')

replace restart {
	ex	(sp), hl
	pop	hl
	push	hl
} by {
	pop	af
	push	hl
	; peephole z88dk-111
} if notUsed('a')

replace restart {
	ld	a,l
	ld	d,h
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	(hl),d
	ld	a,(hl)
	dec	hl
	or	a,(hl)
} by {
	ld	(#%1),hl
	ld	a,h
	or	a,l
	ld	d,h
	ld	hl,#%1
	; peephole z88dk-113
}
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	a,(hl)
	add	a, b
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a, c
	ld	d,a
} by {
	ld	de,(#%1)
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-114
} if notUsed('bc')

replace restart {
	ld	b,l
	ld	c,h
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
} by {
	ld	b,l
	ld	c,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-115
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,#0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
	ld	a,(hl)
	dec	hl
	or	a,(hl)
} by {
	ld	hl,(#%1)
	ld	de,#0x%3%2
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	or	a,l
	ld	hl,#%1
	; peephole z88dk-116a
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,#0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
	ld	a,(hl)
	dec	hl
	or	a,(hl)
} by {
	ld	hl,(#%1)
	ld	bc,#0x%3%2
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	or	a,l
	ld	hl,#%1
	; peephole z88dk-116b
} if notUsed('bc')

replace restart {
	ld	a,e
	add	a,#0x%2
	ld	hl,#%1
	ld	(hl),a
	ld	a,d
	adc	a,#0x%3
	inc	hl
	ld	(hl),a
	dec	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	hl,#0x%3%2
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-117
}
// if notVolatile

replace restart {
	ex	de,hl
	ld	bc,#%1
	push	bc
	push	de
} by {
	ld	bc,#%1
	push	bc
	push	hl
	; peephole z88dk-118
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	dec	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	sla	c
	rl	b
} by {
	ld	hl,(#%1 + %2 - 1)
	add	hl,hl
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %2
	; peephole z88dk-119
}

replace restart {
	ld	hl, (#(%1 + %2) + %3)
	ld	l, d
	ld	h, e
} by {
	ld	l, d
	ld	h, e
	; peephole z88dk-120
}
// if notVolatile

replace restart {
	ld	d,l
	ld	e,h
	ld	bc, (#(%1 + %2) + %3)
	ld	l, d
	ld	h, e
} by {
	ld	d,l
	ld	e,h
	ld	bc, (#(%1 + %2) + %3)
	; peephole z88dk-121
}

replace restart {
	ld	de, #%1 + %2
	ld	a,(de)
	ld	hl,#%3
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ld	hl,(#%1 + %2)
	ld	(#%3),hl
	ld	hl,(#%1 + %2 + 2)
	ld	(#%3 + 2),hl
	ld	de,#%1 + %2 + 3
	ld	hl,#%3 + 3
	; peephole z88dk-122
}

replace restart {
	ld	hl, (#%1 + %2)
	ld	hl,#%3
} by {
	ld	hl,#%3
	; peephole z88dk-123
}
// if notVolatile

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, e
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a, d
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-124
}

replace restart {
	ex	de,hl
	ld	hl,#%1
	push	de
	push	hl
} by {
	push	hl
	ld	hl,#%1
	push	hl
	; peephole z88dk-125
} if notUsed('de')

replace restart {
	ld	de, (#(%1 + %2) + %3)
	ld	bc, (#(%4 + %5) + %6)
	ld	(#%7),de
} by {
	ld	hl, (#(%1 + %2) + %3)
	ld	bc, (#(%4 + %5) + %6)
	ld	(#%7),hl
	; peephole z88dk-126
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	iy,#%1
	inc	0 (iy)
	jp	%2,%3
	ld	iy,#%1
	inc	1 (iy)
} by {
	ld	iy,#%1
	inc	0 (iy)
	jp	%2,%3
	inc	1 (iy)
	; peephole z88dk-127
}

replace restart {
	ld	iy,#%1
	inc	0 (iy)
	jp	NZ,%2
	inc	1 (iy)
%2:
} by {
	ld	hl,#%1
	inc	(hl)
	jp	NZ,%2
	inc	hl
	inc	(hl)
%2:
	; peephole z88dk-128
} if notUsed('iy'), notUsed('hl')

replace restart {
	ld	a,(#%1 + 0)
	sub	a, #0x%2
	ld	iy,#%1
	ld	a,1 (iy)
	sbc	a, #0x%3
	jp	%4,%5
} by {
	ld	hl,(#%1)
	ld	de,#$0x%3%2
	xor	a,a
	sbc	hl,de
	ld	a,h
	jp	%4,%5
	; peephole z88dk-129a  Warning may lead to incorrect code
} if notUsed('de'), notUsed('hl'), notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	sub	a, #0x%2
	ld	iy,#%1
	ld	a,1 (iy)
	sbc	a, #0x%3
	jp	%4,%5
} by {
	ld	hl,(#%1)
	ld	bc,#$0x%3%2
	xor	a,a
	sbc	hl,bc
	ld	a,h
	jp	%4,%5
	; peephole z88dk-129b  Warning may lead to incorrect code
} if notUsed('bc'), notUsed('hl'), notUsed('iy')

replace restart {
	xor	a, a
	ld	(#%1 + 0),a
	ld	(#%1 + 1),a
	ld	(#%1 + 2),a
	ld	(#%1 + 3),a
} by {
	ld	hl,#0x0000
	ld	a,l
	ld	(#%1),hl
	ld	(#%1 + 2),hl
	; peephole z88dk-130
} if notUsed('hl')

replace restart {
	ld	de,(%1)
	sla	e
	rl	d
} by {
	ld	hl,(%1)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-131
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,e
	add	a,#0x%2
	ld	(hl),a
	ld	a,d
	adc	a,#0x%3
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x%3%2
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-132
}

replace restart {
	ld	hl,#%1 + 0
	ld	c, (hl)
	ld	hl,#%1 + 1
	ld	b, (hl)
} by {
	ld	bc,(#%1)
	ld	hl,#%1 + 1
	; peephole z88dk-133a
}

replace restart {
	ld	hl,#%1 + 2
	ld	c, (hl)
	ld	hl,#%1 + 3
	ld	b, (hl)
} by {
	ld	bc,(#%1 + 2)
	ld	hl,#%1 + 3
	; peephole z88dk-133b
}

replace restart {
	ld	hl,#%1 + 0
	ld	e, (hl)
	ld	hl,#%1 + 1
	ld	d, (hl)
} by {
	ld	de,(#%1)
	ld	hl,#%1 + 1
	; peephole z88dk-133c
}

replace restart {
	ld	hl,#%1 + 2
	ld	e, (hl)
	ld	hl,#%1 + 3
	ld	d, (hl)
} by {
	ld	de,(#%1 + 2)
	ld	hl,#%1 + 3
	; peephole z88dk-133d
}

replace restart {
	ld	bc,(#%1)
	ld	hl,#%2
	ld	de,#%3
	push	hl
	push	bc
} by {
	ld	hl,(#%1)
	ld	bc,#%2
	ld	de,#%3
	push	bc
	push	hl
	; peephole z88dk-134
} if notUsed('hl'), notUsed('bc')

replace restart {
	ld	(#%1),hl
	ld	hl,(#%1)
} by {
	ld	(#%1),hl
	; peephole z88dk-135 Remove redundant load
} if notVolatile(%1)

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	d,a
	ld	a,#>(%1)
	adc	a, h
	ld	e,a
	ld	bc, (#(%2 + %3) + %4)
	ld	l, d
	ld	h, e
} by {
	ld	de,#%1
	add	hl,de
	ld	bc, (#(%2 + %3) + %4)
	ld	d,l
	ld	e,h
	; peephole z88dk-136
}

replace restart {
	ld	hl, #%1 + 0
	ld	a,(hl)
	ld	iy,#%2
	ld	0 (iy),a
	inc	hl
	ld	a,(hl)
	ld	iy,#%2
	ld	1 (iy),a
	inc	hl
	ld	a,(hl)
	ld	iy,#%2
	ld	2 (iy),a
	inc	hl
	ld	a,(hl)
	ld	(#%2 + 3),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	ld	hl,#%1 + 3
	; peephole z88dk-137
} if notUsed('iy')

replace restart {
	ld	hl,#%1 + 0
	ld	e, (hl)
	ld	hl,#%1 + 1
	ld	d, (hl)
} by {
	ld	de,(#%1)
	ld	hl,#%1 + 1
	; peephole z88dk-139
}

replace restart {
	ld	iy,#%1
	ld	0 (iy),l
	ld	iy,#%1
	ld	1 (iy),h
} by {
	ld	(#%1),hl
	; peephole z88dk-140
} if notUsed('iy')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,#0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,#0x%3%2
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	; peephole z88dk-141a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,#0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,#0x%3%2
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	; peephole z88dk-141b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc, (#(%1 + %2) + %3)
} by {
	; peephole z88dk-142a
} if notUsed('bc')

replace restart {
	ld	de, (#(%1 + %2) + %3)
} by {
	; peephole z88dk-142b
} if notUsed('de')

replace restart {
	ld	hl, (#(%1 + %2) + %3)
} by {
	; peephole z88dk-142c
} if notUsed('hl')

replace restart {
;	---------------------------------
; Function %1
; ---------------------------------
_%1::
	jp	%2
} by {
;	---------------------------------
; Function %1
; ---------------------------------
_%1	=	%2
	; peephole z88dk-143
}

replace restart {
	ld	a,l
	add	a,#0xFF
	ld	%1 (ix),a
	ld	a,h
	adc	a,#0xFF
	ld	%2 (ix),a
} by {
	dec	hl
	ld	%1 (ix),l	
	ld	%2 (ix),h
	ld	a,h
	inc	hl
	; peephole z88dk-144
}

replace restart {
	ex	de,hl
	pop	bc
	ld	l, e
	ld	h, d
} by {
	pop	bc
	ld	e,l
	ld	d,h
	; peephole z88dk-145
}

replace restart {
	ld	d,l
	ld	e,h
	ld	a,%1 (ix)
	add	a, d
	ld	d,a
	ld	a,%2 (ix)
	adc	a, e
	ld	%3 (ix), d
	ld	%4 (ix), a
} by {
	ld	e,%1 (ix)
	ld	d,%2 (ix)
	add	hl,de
	ld	%3 (ix), l
	ld	%4 (ix), h
	ld	a,h
	; peephole z88dk-146
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	d,l
	ld	b,h
	ld	a,%1 (ix)
	add	a, d
	ld	e,a
	ld	a,%2 (ix)
	adc	a, b
	ld	d,a
} by {
	ex	de,hl
	ld	l,%1 (ix)
	ld	h,%2 (ix)
	add	hl,de
	ex	de,hl
	ld	a,d
	ld	b,h
	; peephole z88dk-147
}

replace restart {
	pop	de
	pop	%1
	ex	de,hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	pop	hl
	pop	%1
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	; peephole z88dk-148
}

replace restart {
	ld	c,l
	ld	b,h
	pop	de
	push	bc
} by {
	pop	de
	push	hl
	; peephole z88dk-149
} if notUsed('bc')

replace restart {
	ld	d,l
	ld	e,h
	pop	bc
	ld	%1 (ix),d
	ld	%2 (ix),e
} by {
	pop	bc
	ld	%1 (ix),l
	ld	%2 (ix),h
	; peephole z88dk-150
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	ld	l, d
	ld	h, e
} by {
	ld	hl,(#%1)
	ld	d,l
	ld	e,h
	; peephole z88dk-152
}

replace restart {
	pop	bc
	ld	l, c
	ld	h, b
} by {
	pop	hl
	; peephole z88dk-153
} if notUsed('bc')

replace restart {
	ld	de,(#%1)
	ld	d,#%2
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	ld	h,#%2
	ld	e, l
	ld	d, h
	; peephole z88dk-154a
}

replace restart {
	ld	bc,(%1)
	ld	b,#%2
	ld	l, c
	ld	h, b
} by {
	ld	hl,(%1)
	ld	h,#%2
	ld	c, l
	ld	b, h
	; peephole z88dk-154b
}

replace restart {
	ld	%3,#%2
	push	%1
	ld	%3,#%2
	push	%1
	ld	%3,#%2
	push	%1
} by {
	ld	%3,#%2
	push	%1
	push	%1
	push	%1
	; peephole z88dk-155a
}

replace restart {
	ld	%3,#%2
	push	%1
	ld	%3,#%2
	push	%1
} by {
	ld	%3,#%2
	push	%1
	push	%1
	; peephole z88dk-155b
}

replace restart {
	ld	iy,#%1
	ld	%2 (iy),a
} by {
	ld	(#%1 + %2),a
	ld	iy,#%1
	; peephole z88dk-156a
}

replace restart {
	ld	iy,#%1
	ld	%2 (iy),#%3
} by {
	ld	a,#%3
	ld	(#%1 + %2),a
	ld	iy,#%1
	; peephole z88dk-156b
} if notUsed('a')

replace restart {
	ld	hl,#%1
	ld	e,(hl)
	ld	d,#%2
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	ld	h,#%2
	ld	e,l
	ld	d,h
	; peephole z88dk-157a
}

replace restart {
	ld	hl,#%1
	ld	c,(hl)
	ld	b,#%2
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	ld	h,#%2
	ld	c,l
	ld	b,h
	; peephole z88dk-157b
}

replace restart {
	ld	hl,#%1
	ld	c,(hl)
	ld	b,#%4
} by {
	ld	bc,(#%1)
	ld	b,#%4
	; peephole z88dk-158a
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	e,(hl)
	ld	d,#%4
} by {
	ld	de,(#%1)
	ld	d,#%4
	; peephole z88dk-158b
} if notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,(#%1)
	ld	(bc),a
} by {
	ld	a,(#%1)
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole z88dk-159a
}

replace restart {
	ld	e,l
	ld	d,h
	ld	a,(#%1)
	ld	(de),a
} by {
	ld	a,(#%1)
	ld	(hl),a
	; peephole z88dk-159b
} if notUsed('de')

replace restart {
	ex	de,hl
	ld	a,(#%1)
	ld	(de),a
} by {
	ld	a,(#%1)
	ld	(hl),a
	; peephole z88dk-159c
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	xor	a,a
	ld	(bc),a
} by {
	xor	a,a
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole z88dk-159d
}

replace restart {
	ld	hl,#%1
	ld	b,(hl)
	inc	hl
	ld	c,(hl)
	ld	l, b
	ld	h, c
} by {
	ld	hl,(#%1)
	ld	b, l
	ld	c, h
	; peephole z88dk-160a
}

replace restart {
	ld	hl,#%1
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	ld	l, d
	ld	h, e
} by {
	ld	hl,(#%1)
	ld	d, l
	ld	e, h
	; peephole z88dk-160b
}

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-161a
} if notUsed('hl')

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-161b
}

replace restart {
	ex	de,hl
	sla	e
	rl	d
} by {
	add	hl,hl
	ex	de,hl
	; peephole z88dk-161c
}

replace restart {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-161d
} if notUsed('de')

replace restart {
	ld	%1,%2 + %3 - %3
} by {
	ld	%1,%2
	; peephole z88dk-162
}

replace restart {
	ld	hl,#%3
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
	ld	l, %1
	ld	h, %2
} by {
	ld	hl,(#%3)
	ld	%1, l
	ld	%2, h
	; peephole z88dk-163
}

replace restart {
	ld	a,(hl)
	ld	(de),a
	inc	de
	inc	hl
} by {
	ldi
	; peephole z88dk-164a
} if notUsed('bc')

replace restart {
	ld	a,(hl)
	ld	(de),a
	inc	de
	inc	hl
} by {
	ldi
	inc	bc
	; peephole z88dk-164b
}

replace restart {
	ld	hl,#%1
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	inc	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
} by {
	ld	de,(#%1)
	ld	bc,(#%1 + 2)
	ld	hl,#%1 + 3
	; peephole z88dk-165a
}

replace restart {
	ld	hl,#%1
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	bc,(#%1)
	ld	de,(#%1 + 2)
	ld	hl,#%1 + 3
	; peephole z88dk-165b
}

replace restart {
	ld	hl,#%1
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
} by {
	ld	de,(#%1)
	ld	hl,#%1 + 1
	; peephole z88dk-166a
}

replace restart {
	ld	hl,#%1
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
} by {
	ld	bc,(#%1)
	ld	hl,#%1 + 1
	; peephole z88dk-166b
}

replace restart {
	ld	de,(#%1)
	dec	de
	ld	%2 (ix),e
	ld	%3 (ix),d
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	dec	hl
	ld	%2 (ix),l
	ld	%3 (ix),h
	ld	e,l
	ld	d,h
	; peephole z88dk-167a
}

replace restart {
	ld	de,(#%1)
	dec	de
	ld	%2 (ix),e
	ld	%2 (ix),d
} by {
	ld	hl,(#%1)
	dec	hl
	ld	%2 (ix),l
	ld	%3 (ix),h
	; peephole z88dk-167b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	(#%1),de
	ld	hl,#%1 + 1
	; peephole z88dk-168a
}

replace restart {
	ld	hl,#%1
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	(#%1),bc
	ld	hl,#%1 + 1
	; peephole z88dk-168b
}

replace restart {
	ld	hl,#%1
	ld	b,(hl)
	inc	hl
	ld	c,(hl)
	sla	b
	rl	c
	ld	a,e
	add	a, b
	ld	e,a
	ld	a,d
	adc	a, c
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,hl
	ld	b,l
	ld	c,h
	add	hl,de
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-169
}

replace restart {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
	ex	de,hl
} by {
	ld	de,#%1
	add	hl,de
	ex	de,hl
	; peephole z88dk-170
} if notUsed('hl')

replace restart {
	dec	hl
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
} by {
	ld	%2,(hl)
	dec	hl
	ld	%1,(hl)
	; peephole z88dk-171
} if notUsed('hl'), operandsNotRelated(%1 'hl'), operandsNotRelated(%2 'hl')

replace restart {
	sla	e
	rl	d
	sla	e
	rl	d
} by {
	ex	de,hl
	add	hl,hl
	add	hl,hl
	ex	de,hl
	; peephole z88dk-172
}

replace restart {
	ld	de,(#%1)
	%2	de
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	%2	hl
	ld	e, l
	ld	d, h
	; peephole z88dk-173a
}

replace restart {
	ld	bc,(#%1)
	%2	bc
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	%2	hl
	ld	c, l
	ld	b, h
	; peephole z88dk-173b
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	%3 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%4 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%5 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%6 (%2),a
} by {
	ld	hl,(#%1)
	ld	%3 (%2),l
	ld	%4 (%2),h
	ld	hl,(#%1 + 2)
	ld	%5 (%2),l
	ld	%6 (%2),h
	ld	a,h
	ld	hl,#%1 + 3
	; peephole z88dk-174a
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	%3 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%4 (%2),a
} by {
	ld	hl,(#%1)
	ld	%3 (%2),l
	ld	%4 (%2),h
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-174b
}

replace restart {
	ld	a, %3 (%2)
	ld	hl,#%1
	ld	(hl),a
	ld	a, %4 (%2)
	inc	hl
	ld	(hl),a
	ld	a, %5 (%2)
	inc	hl
	ld	(hl),a
	ld	a, %6 (%2)
	inc	hl
	ld	(hl),a
} by {
	ld	l,%3 (%2)
	ld	h,%4 (%2)
	ld	(#%1),hl
	ld	l,%5 (%2)
	ld	h,%6 (%2)
	ld	(#%1 + 2),hl
	ld	a,h
	ld	hl,#%1 + 3
	; peephole z88dk-175a
}

replace restart {
	ld	a, %3 (%2)
	ld	hl,#%1
	ld	(hl),a
	ld	a, %4 (%2)
	inc	hl
	ld	(hl),a
} by {
	ld	l,%3 (%2)
	ld	h,%4 (%2)
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-175b
}

replace restart {
	ld	hl,#%1 + %2
	ld	a,%3 (%4)
	inc	hl
	ld	(hl),a
	ld	a,%5 (%6)
	inc	hl
	ld	(hl),a
} by {
	ld	l,%3 (%4)
	ld	h,%5 (%6)
	ld	(#%1 + %2+1),hl
	ld	a,h
	ld	hl,#%1 + %2+2
	; peephole z88dk-175c
}

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	ld	%3 (%4),a
	inc	hl
	ld	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%1 + %2)
	ld	%3 (%4),l
	ld	%5 (%6),h
	ld	a,h
	ld	hl,#%1 + %2+1
	; peephole z88dk-175d
}

replace restart {
	ld	(#%1),%2
	ld	%2,(#%1)
} by {
	ld	(#%1),%2
	; peephole z88dk-176a
} if notVolatile(%1)

replace restart {
	ld	%1,(#%2)
	ld	(#%2),%1
} by {
	ld	%1,(#%2)
	; peephole z88dk-176b
} if notVolatile(%2)

replace restart {
	ld	c,l
	ld	b,h
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	push	hl
	push	bc
} by {
	ld	c,%1 (%3)
	ld	b,%2 (%3)
	push	bc
	push	hl
	; peephole z88dk-177a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	e,l
	ld	d,h
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	push	hl
	push	de
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	push	de
	push	hl
	; peephole z88dk-177b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,l
	ld	d,h
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	push	hl
	push	de
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	ex	de,hl
	push	hl
	push	de
	; peephole z88dk-177c
} 

replace restart {
	ld	b,l
	ld	c,h
	pop	de
	ld	a,b
	sub	a, e
	ld	l,a
	ld	a,c
	sbc	a, d
	ld	h,a
} by {
	ld	b,l
	ld	c,h
	pop	de
	xor	a,a
	sbc	hl,de
	ld	a,h
	; peephole z88dk-178
}

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	; peephole z88dk-179a1
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	; peephole z88dk-179a2
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ex	de,hl
	; peephole z88dk-179b1
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	ex	de,hl
	; peephole z88dk-179b2
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	; peephole z88dk-179c1
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	a,h
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	a,h
	; peephole z88dk-179c2
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ex	de,hl
	; peephole z88dk-179d1
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	a,h
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	a,h
	ex	de,hl
	; peephole z88dk-179d2
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	; peephole z88dk-179e1
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	ld	a,h
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	ld	a,h
	; peephole z88dk-179e2
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	ex	de,hl
	; peephole z88dk-179f1
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	ld	a,h
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#%5)
	ld	(#%6),hl
	ld	hl,(#%7)
	ld	(#%8),hl
	ld	a,h
	ex	de,hl
	; peephole z88dk-179f2
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + %3)
	ld	(#%2 + %4),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + %3)
	ld	(#%2 + %4),hl
	; peephole z88dk-179g1
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + %3)
	ld	(#%2 + %4),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + %3)
	ld	(#%2 + %4),hl
	ex	de,hl
	; peephole z88dk-179g2
} if notUsed('de')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#_%3 + 2)
	ld	(#%4 + 2),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#_%3 + 2)
	ld	(#%4 + 2),hl
	; peephole z88dk-179h1
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#_%3 + 2)
	ld	(#%4 + 2),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	hl,(#%3)
	ld	(#%4),hl
	ld	hl,(#_%3 + 2)
	ld	(#%4 + 2),hl
	ex	de,hl
	; peephole z88dk-179h1
} if notUsed('de')

replace restart {
	ld	%1,#%2
	ld	%3,%4
	ld	%5,%6
	ld	%1,#%2
} by {
	ld	%1,#%2
	ld	%3,%4
	ld	%5,%6
	; peephole z88dk-180  Removed load of #%2 into %1 since it's still there.
} if notVolatile(%1), operandsNotRelated(%3 %1), operandsNotRelated(%5 %1)

replace restart {
	ld	%1 (%5),d
	ld	%2 (%5),e
	ld	%3 (%5),h
	ld	%4 (%5),l
	ld	l,%2 (%5)
	ld	h,%1 (%5)
	push	hl
	ld	l,%4 (%5)
	ld	h,%3 (%5)
	push	hl
} by {
	ld	%1 (%5),d
	ld	%2 (%5),e
	ld	%3 (%5),h
	ld	%4 (%5),l
	push	de
	push	hl
	; peephole z88dk-181
}
// if notVolatile

replace restart {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	inc	hl
	inc	hl
	ld	(hl),%4
	ld	l,%1 (%3)
	ld	h,%2 (%3)
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	inc	hl
	inc	hl
	ld	(hl),%4
	dec	hl
	dec	hl
	; peephole z88dk-182f
}
// if notVolatile()

replace restart {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	inc	hl
	ld	(hl),%4
	ld	l,%1 (%3)
	ld	h,%2 (%3)
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	inc	hl
	ld	(hl),%4
	dec	hl
	; peephole z88dk-182d
}
// if notVolatile()

replace restart {
	ld	%1 (%3),l
	ld	%2 (%3),h
	ld	(hl),%4
	ld	l,%1 (%3)
	ld	h,%2 (%3)
} by {
	ld	%1 (%3),l
	ld	%2 (%3),h
	ld	(hl),%4
	; peephole z88dk-182b
}
// if notVolatile()

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	add	a,#0x%1
	ld	hl,#%3
	ld	(hl),a
	ld	a,e
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	de,#0x%2%1
	add	hl,de
	ld	(#%3),hl
	ld	hl,#%3 + 1
	; peephole z88dk-183a
} if notUsed('de')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	add	a,#0x%1
	ld	hl,#%3
	ld	(hl),a
	ld	a,e
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	d,l
	ld	e,h
	ld	bc,#0x%2%1
	add	hl,bc
	ld	(#%3),hl
	ld	hl,#%3 + 1
	; peephole z88dk-183b
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	push	de
} by {
	push	hl
	; peephole z88dk-184a
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	push	bc
} by {
	push	hl
	; peephole z88dk-184b
} if notUsed('bc')

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-185a
} if notUsed('hl')

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-185b
}

replace restart {
	ld	b,l
	ld	c,h
	pop	de
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
} by {
	ld	b,l
	ld	c,h
	pop	de
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-186
}

replace restart {
	inc	bc
	dec	bc
} by {
	; peephole z88dk-187a
}

replace restart {
	inc	de
	dec	de
} by {
	; peephole z88dk-187b
}

replace restart {
	inc	hl
	dec	hl
} by {
	; peephole z88dk-187c
}

replace restart {
	dec	bc
	inc	bc
} by {
	; peephole z88dk-188a
}

replace restart {
	dec	de
	inc	de
} by {
	; peephole z88dk-188b
}

replace restart {
	dec	hl
	inc	hl
} by {
	; peephole z88dk-188c
}

replace restart {
	dec	%1
	inc	%1
	inc	%1
} by {
	inc	%1
	; peephole z88dk-189a
} if notVolatile(%1)

replace restart {
	inc	%1
	dec	%1
	dec	%1
} by {
	dec	%1
	; peephole z88dk-189b
} if notVolatile(%1)

replace restart {
	sla	%2
	rl	%3
	ld	l, %2
	ld	h, %3
} by {
	ld	l, %2
	ld	h, %3
	add	hl,hl
	ld	%2, l
	ld	%3, h
	; peephole z88dk-190a
}

replace restart {
	ld	hl,#%1
	ld	%2,(hl)
	inc	hl
	ld	%3,(hl)
	ld	l, %2
	ld	h, %3
} by {
	ld	hl,(#%1)
	ld	%2, l
	ld	%3, h
	; peephole z88dk-190b
}

replace restart {
	push	hl
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	pop	hl
	ld	a,d
	add	a,#0x%1
	ld	d,a
	ld	a,e
	adc	a,#0x%2
	ld	e,a
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	push	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	hl,#0x%2%1
	add	hl,de
	ex	de,hl
	pop	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	; peephole z88dk-191a
} if notUsed('de')

replace restart {
	push	hl
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	pop	hl
	ld	a,d
	add	a,#0x%1
	ld	d,a
	ld	a,e
	adc	a,#0x%2
	ld	e,a
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	push	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	hl,#0x%2%1
	add	hl,de
	ld	d,l
	ld	e,h
	pop	hl
	ld	(hl),d
	inc	hl
	ld	(hl),e
	; peephole z88dk-191b
}

replace restart {
	ld	%1 (%5),%3
	ld	%2 (%5),%4
	sla	%1 (%5)
	rl	%2 (%5)
	ld	l,%1 (%5)
	ld	h,%2 (%5)
} by {
	ld	l,%3
	ld	h,%4
	add	hl,hl
	ld	%1 (%5),l
	ld	%2 (%5),h
	; peephole z88dk-192b
}

replace restart {
	sla	%1 (%5)
	rl	%2 (%5)
	ld	l,%1 (%5)
	ld	h,%2 (%5)
} by {
	ld	l,%1 (%5)
	ld	h,%2 (%5)
	add	hl,hl
	ld	%1 (%5),l
	ld	%2 (%5),h
	; peephole z88dk-192c
}

replace restart {
	ld	%1 (%5),%3
	ld	%2 (%5),%4
	ld	l,%1 (%5)
	ld	h,%2 (%5)
} by {
	ld	l,%3
	ld	h,%4
	ld	%1 (%5),l
	ld	%2 (%5),h
	; peephole z88dk-192d
}
// if notVolatile

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	ld	(#%1),bc
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	c,l
	ld	b,h
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ld	hl,#%1 + 3
	; peephole z88dk-193
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	d,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	e,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	d,l
	ld	e,h
	ld	a,h
	ld	hl,#%2 + 1
	; peephole z88dk-194
}

replace restart {
	push	hl
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
	pop	hl
} by {
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
	dec	hl
	; peephole z88dk-195a
}

replace restart {
	push	hl
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	pop	hl
} by {
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	dec	hl
	; peephole z88dk-195b
}

replace restart {
	push	hl
	ld	%1,(hl)
	dec	hl
	ld	%2,(hl)
	pop	hl
} by {
	ld	%1,(hl)
	dec	hl
	ld	%2,(hl)
	inc	hl
	; peephole z88dk-195c
}

replace restart {
	push	hl
	ld	(hl),%1
	dec	hl
	ld	(hl),%2
	pop	hl
} by {
	ld	(hl),%1
	dec	hl
	ld	(hl),%2
	inc	hl
	; peephole z88dk-195d
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	c,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,#%2 + 1
	; peephole z88dk-196
}

replace restart {
	ld	%4,%1 + %2
	push	%3
	dec	%4
} by {
	push	%3
	ld	%4,%1 + %2
	dec	%4
	; peephole z88dk-197a  Warning may lead to incorrect code
} if notSame(%3 %4)

replace restart {
	ld	%4,%1 + %2
	push	%3
	inc	%4
} by {
	push	%3
	ld	%4,%1 + %2
	inc	%4
	; peephole z88dk-197b  Warning may lead to incorrect code
} if notSame(%3 %4)

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	add	hl,bc
} by {

	ld	bc,#%1
	add	hl,bc
	; peephole z88dk-198a
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	add	hl,de
} by {

	ld	de,#%1
	add	hl,de
	; peephole z88dk-198b
} if notUsed('de')

replace restart {
	ld	%1,l
	ld	%2,h
	pop	de
	ld	l,%1
	ld	h,%2
} by {
	ld	%1,l
	ld	%2,h
	pop	de
	; peephole z88dk-199
} if operandsNotRelated(%1 'de'), operandsNotRelated(%2 'de'), operandsNotRelated(%1 'hl'), operandsNotRelated(%2 'hl')
// if notVolatile()

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%2 + 1
	; peephole z88dk-200a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%2 + 1
	; peephole z88dk-200b
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	e,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-202a
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	e,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ex	de,hl
	ld	hl,#%2 + 1
	; peephole z88dk-202b
} if notUsed('a')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	c,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-202c
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	c,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,#%2 + 1
	; peephole z88dk-202d
} if notUsed('a')

replace restart {
	ex	de,hl
	push	de
} by {
	push	hl
	; peephole z88dk-203a
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	push	de
} by {
	push	hl
	ex	de,hl
	; peephole z88dk-203b
}

replace restart {
	ld	c,l
	ld	b,h
	push	bc
} by {
	push	hl
	; peephole z88dk-203c
} if notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	push	bc
} by {
	push	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-203d
}

replace restart {
	ld	e,l
	ld	d,h
	push	de
} by {
	push	hl
	; peephole z88dk-203e
} if notUsed('de')

replace restart {
	ld	e,l
	ld	d,h
	push	de
} by {
	push	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-203f
}

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a, (hl)
	ld	e,a
	ld	a,d
	inc	hl
	adc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-204a
}

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,b
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-204b
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	; peephole z88dk-205a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	; peephole z88dk-205b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-205c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-205d
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	sla	c
	rl	b
} by {
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-206a
} if notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	sla	c
	rl	b
} by {
	ld	e,l
	ld	d,h
	add	hl,hl
	ld	c,l
	ld	b,h
	ld	l,e
	ld	h,d
	; peephole z88dk-206b
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	ld	l,e
	ld	h,d
	sla	c
	rl	b
} by {
	add	hl,hl
	ld	c,l
	ld	b,h
	ld	l,e
	ld	h,d
	; peephole z88dk-206c
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	add	hl,bc
} by {
	ld	bc,#%1
	add	hl,bc
	; peephole z88dk-207a
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-207b
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-208a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-208c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	push	de
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	pop	de
	ld	hl,#%1 + 1
	; peephole z88dk-208e
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	(hl),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%2 + 1
	; peephole z88dk-209a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	(hl),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%2 + 1
	; peephole z88dk-209c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	(hl),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(hl),a
} by {
	push	de
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%2),hl
	pop	de
	ld	hl,#%2 + 1
	; peephole z88dk-209e
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-210a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-210c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	push	de
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%1),hl
	pop	de
	ld	hl,#%1 + 1
	; peephole z88dk-210e
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	(hl),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%2 + 1
	; peephole z88dk-211a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	(hl),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%2 + 1
	; peephole z88dk-211c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-212a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-212c
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	push	de
	ld	hl,(#%1)
	ld	de,(#%2)
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	pop	de
	ld	hl,#%2 + 1
	; peephole z88dk-212e
}

replace restart {
	ld	a,c
	add	a, e
	ld	c,a
	ld	a,b
	adc	a, d
	ld	b,a
} by {
	ex	de,hl
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-213a
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	a,c
	add	a, e
	ld	c,a
	ld	a,b
	adc	a, d
	ld	b,a
} by {
	ld	e,l
	ld	d,h
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-213b
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),#<(%2)
	inc	hl
	ld	(hl),#>(%2)
} by {
	ld	hl,#%2
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-215
}

replace restart {
	ld	hl,#%1 + 1
	ld	d,(hl)
	dec	hl
	ld	e,(hl)
} by {
	ld	de,(#%1)
	ld	hl,#%1
	; peephole z88dk-216a
}

replace restart {
	ld	hl,#%1 + 1
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
} by {
	ld	bc,(#%1)
	ld	hl,#%1
	; peephole z88dk-216c
}

replace restart {
	ld	(#%1),hl
	ld	de,(#%1)
} by {
	ld	(#%1),hl
	ex	de,hl
	; peephole z88dk-217a
} if notUsed('hl'), notVolatile(%1)

replace restart {
	ld	(#%1),hl
	ld	de,(#%1)
} by {
	ld	(#%1),hl
	ld	e,l
	ld	d,h
	; peephole z88dk-217b
} if notVolatile(%1)

replace restart {
	ex	de,hl
	ld	a,%1 (%3)
	add	a, e
	ld	e,a
	ld	a,%2 (%3)
	adc	a, d
	ld	d,a
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	ex	de,hl
	; peephole z88dk-218a
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,%1 (%3)
	add	a, e
	ld	e,a
	ld	a,%2 (%3)
	adc	a, d
	ld	d,a
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,de
	ex	de,hl
	; peephole z88dk-218b
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,%1 (%3)
	add	a, d
	ld	d,a
	ld	a,%2 (%3)
	adc	a, e
	ld	e,a
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	ld	e,h
	ld	d,l
	; peephole z88dk-218c
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,%1 (%3)
	add	a, d
	ld	d,a
	ld	a,%2 (%3)
	adc	a, e
	ld	e,a
} by {
	ld	h,e
	ld	l,d
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	ld	e,h
	ld	d,l
	; peephole z88dk-218d
	; increases code size but may allow more substitutions
} if notUsed('hl'), notUsed('a')

replace restart {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,de
	ex	de,hl
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	ex	de,hl
	; peephole z88dk-219a
} if notUsed('hl')

replace restart {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,de
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	; peephole z88dk-219b
} if notUsed('de')

replace restart {
	ld	a,%1 (%7)
	add	a, #0x%3
	ld	c,a
	ld	a,%2 (%7)
	adc	a, #0x%4
	ld	b,a
	ld	%5 (%7),c
	ld	%6 (%7),b
} by {
	ld	l,%1 (%7)
	ld	h,%2 (%7)
	ld	bc,#0x%4%3
	add	hl,bc
	ld	%5 (%7),l
	ld	%6 (%7),h
	; peephole z88dk-220
} if notUsed('hl'), notUsed('a'), notUsed('bc')

replace restart {
	ld	%1 (%3),l
	ld	%2 (%3),h
	sla	%1 (%3)
	rl	%2 (%3)
} by {
	add	hl,hl
	ld	%1 (%3),l
	ld	%2 (%3),h
	; peephole z88dk-221
} if notUsed('hl')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,%3 (%5)
	add	a, d
	ld	%1 (%5),a
	ld	a,%4 (%5)
	adc	a, e
	ld	%2 (%5),a
} by {
	ld	e,%3 (%5)
	ld	d,%4 (%5)
	add	hl,de
	ld	%1 (%5),l
	ld	%2 (%5),h
	; peephole z88dk-222
} if notUsed('hl'), notUsed('de'), notUsed('a')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	dec	hl
	or	a,(hl)
} by {
	ld	hl,(#%1 + %2 - 1)
	ld	a,h
	or	a,l
	; peephole z88dk-223
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	(#%3),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	(#%3 + 1),a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%3),hl
	ld	hl,#%2 + 1
	; peephole z88dk-224a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	(#%3),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	(#%3 + 1),a
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%3),hl
	ld	hl,#%2 + 1
	; peephole z88dk-224b
} if notUsed('bc')

replace restart {
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sbc	a, (hl)
	ld	(#%3 + 2),a
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sbc	a, (hl)
	ld	(#%3 + 3),a
} by {
	ld	hl,(#%1 + 2)
	ld	de,(#%2 + 2)
	sbc	hl,de
	ld	a,h
	ld	(#%3 + 2),hl
	ld	hl,#%2 + 3
	; peephole z88dk-225a
} if notUsed('de')

replace restart {
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sbc	a, (hl)
	ld	(#%3 + 2),a
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sbc	a, (hl)
	ld	(#%3 + 3),a
} by {
	ld	hl,(#%1 + 2)
	ld	bc,(#%2 + 2)
	sbc	hl,bc
	ld	a,h
	ld	(#%3 + 2),hl
	ld	hl,#%2 + 3
	; peephole z88dk-225b
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	(#%2 + 0),a
	inc	hl
	ld	a,(hl)
	ld	(#%2 + 1),a
	inc	hl
	ld	a,(hl)
	ld	(#%2 + 2),a
	inc	hl
	ld	a,(hl)
	ld	(#%2 + 3),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	ld	hl,#%1 + 3
	; peephole z88dk-226
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	(#%2 + 0),a
	inc	hl
	ld	a,(hl)
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-226c
}

replace restart {
	ld	de,#%1
	ld	a,(de)
	ld	hl,#%2
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%1 + 2)
	ld	(#%2 + 2),hl
	ld	a,h
	ld	de,#%1 + 3
	ld	hl,#%2 + 3
	; peephole z88dk-227
}

replace restart {
	ld	de,#%1
	ld	a,(de)
	ld	hl,#%2
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	a,h
	ld	de,#%1 + 1
	ld	hl,#%2 + 1
	; peephole z88dk-227e
}

replace restart {
	ld	hl,#%1
	ld	(hl),a
} by {
	ld	(#%1),a
	; peephole z88dk-227i
} if notUsed('hl')

replace restart {
	ld	bc,(#%1)
	ld	b,%2
} by {
	ld	a,(#%1)
	ld	c,a
	ld	b,%2
	; peephole z88dk-228a
} if notUsed('a')

replace restart {
	ld	de,(#%1)
	ld	d,%2
} by {
	ld	a,(#%1)
	ld	e,a
	ld	d,%2
	; peephole z88dk-228b
} if notUsed('a')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	%3,a
	ld	a,#>(%1)
	adc	a, %5
	ld	%4,a
} by {
	ld	a,(#%2)
	add	a,#<(%1)
	ld	%3,a
	ld	a,#>(%1)
	adc	a, %5
	ld	%4,a
	; peephole z88dk-229
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	ld	hl,#%2
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	d,l
	ld	e,h
	ld	hl,#%1 + 2
	; peephole z88dk-230
}

replace restart {
	ld	%2,l
	ld	%3,h
	ld	hl,#%1
	ld	(hl),%2
	inc	hl
	ld	(hl),%3
} by {
	ld	(#%1),hl
	ld	%2,l
	ld	%3,h
	ld	hl,#%1 + 1
	; peephole z88dk-231
}

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%2 + 1
	; peephole z88dk-232a
}

replace restart {
	ld	hl,#%2 + %1
	sla	(hl)
	inc	hl
	rl	(hl)
} by {
	ld	hl,(#%2 + %1)
	add	hl,hl
	ld	(#%2 + %1),hl
	; peephole z88dk-232b
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	sla	(hl)
	inc	hl
	rl	(hl)
} by {
	ld	hl,(#%1)
	add	hl,hl
	ld	(#%1),hl
	; peephole z88dk-232c
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	ld	(hl),a
	ld	a,#%5
	jp	%3
%4:
	dec	hl
	sla	(hl)
	inc	hl
	rl	(hl)
%3:
	dec	a
	jp	NZ,%4
} by {
	ld	hl,(#%1)
	z88dk_sll hl,%5
	ld	(#%2),hl
	ld	a,#0x00
	ld	hl,#%2 + 1
	; peephole z88dk-232e
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2 + 1
	ld	(hl),a
	dec	hl
	ld	(hl),#%3
} by {
	ld	a,(#%1)
	ld	h,a
	ld	l,#%3
	ld	(#%2),hl
	; peephole z88dk-232g
} if notUsed('hl')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
} by {
	ld	hl,(#%1)
	ld	a,h
	add	hl,hl
	ld	(#%2),hl
	; peephole z88dk-233a
} if notUsed('hl'), notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	a,h
	add	hl,hl
	ld	(#%2),hl
	ex	de,hl
	; peephole z88dk-233b
} if notUsed('de'), notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
} by {
	push	hl
	ld	hl,(#%1)
	ld	a,h
	add	hl,hl
	ld	(#%2),hl
	pop	hl
	; peephole z88dk-233c
} if notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	a,#%5
	jp	%3
%4:
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
%3:
	dec	a
	jp	NZ,%4
} by {
	ld	hl,(#%1)
	z88dk_sll hl,%5
	ld	(#%2),hl
	ld	a,#0x00
	; peephole z88dk-233d
} if notUsed('hl'), notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	a,#%5
	jp	%3
%4:
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
%3:
	dec	a
	jp	NZ,%4
} by {
	ex	de,hl
	ld	hl,(#%1)
	z88dk_sll hl,%5
	ld	(#%2),hl
	ld	a,#0x00
	ex	de,hl
	; peephole z88dk-233e
} if notUsed('de'), notUsed('iy')

replace restart {
	ld	a,(#%1 + 0)
	ld	(#%2 + 0),a
	ld	a,(#%1 + 1)
	ld	(#%2 + 1),a
	ld	a,#%5
	jp	%3
%4:
	ld	iy,#%2
	sla	0 (iy)
	ld	iy,#%2
	rl	1 (iy)
%3:
	dec	a
	jp	NZ,%4
} by {
	push	hl
	ld	hl,(#%1)
	z88dk_sll hl,%5
	ld	(#%2),hl
	ld	a,#0x00
	pop	hl
	; peephole z88dk-233f
} if notUsed('iy')

replace restart {
	ld	a,(#%1)
	add	a, e
	ld	(#%2),a
	ld	a,(#%1 + 1)
	adc	a, d
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	a,h
	ld	(#%2),hl
	; peephole z88dk-235a
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	add	a, c
	ld	(#%2),a
	ld	a,(#%1 + 1)
	adc	a, b
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	(#%2),hl
	; peephole z88dk-235b
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	c,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	bc,#%1
	ld	hl,(#%2)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-236a
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	e,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	d,a
} by {
	ld	de,#%1
	ld	hl,(#%2)
	add	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-236b
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	(#%2),a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	ld	(hl),a
	srl	(hl)
	dec	hl
	rr	(hl)
} by {
	ld	hl,(#%1)
	ld	a,h
	srl	h
	rr	l
	ld	(#%2),hl
	ld	hl,#%2
	; peephole z88dk-237a
}

replace restart {
	ld	hl,#%2
	inc	hl
	srl	(hl)
	dec	hl
	rr	(hl)
} by {
	ld	hl,(#%2)
	srl	h
	rr	l
	ld	(#%2),hl
	ld	hl,#%2
	; peephole z88dk-237c
}

replace restart {
	ld	hl,#%1 + 1
	ld	(#%1),de
	sra	(hl)
	dec	hl
	rr	(hl)
} by {
	ld	l,e
	ld	h,d
	sra	h
	rr	l
	ld	(#%1),hl
	ld	hl,#%1
	; peephole z88dk-238a
}

replace restart {
	ld	hl,#%1
	inc	hl
	sra	(hl)
	dec	hl
	rr	(hl)
} by {
	ld	hl,(#%1)
	sra	h
	rr	l
	ld	(#%1),hl
	ld	hl,#%1
	; peephole z88dk-238b
}

replace restart {
	ld	a,(#%1 + 1)
	ld	hl,#%2
	ld	(hl),a
	inc	hl
	ld	(hl),#%3
} by {
	ld	hl,(#%1 + 1)
	ld	a,l
	ld	h,#%3
	ld	(#%2),hl
	; peephole z88dk-239
} if notUsed('hl')

replace restart {
	ld	(hl),%1
	ld	%1,(hl)
} by {
	ld	(hl),%1
	; peephole z88dk-240
}
// if notVolatile

replace restart {
	ld	b,l
	ld	c,h
	pop	de
} by {
	pop	de
	ld	b,l
	ld	c,h
	; peephole z88dk-241
}

replace restart {
	ld	%1,l
	ld	%2,h
	ld	a,%2
	or	a,%1
} by {
	ld	a,h
	or	a,l
	; peephole z88dk-242
} if notUsed(%1), notUsed(%2)

replace restart {
	ld	a,#0x10
%1:
	srl	c
	rr	b
	rr	d
	rr	e
	dec	a
	%2	NZ,%1
} by {
	ld	d,c
	ld	e,b
	xor	a,a
	ld	c,a
	ld	b,a
	; peephole z88dk-243a
}

replace restart {
	ld	b,#0x0F
%1:
	sra	d
	rr	e
	rr	h
	rr	l
	djnz	%1
} by {
	rl	h
	ex	de,hl
	adc	hl,hl
	sbc	a,a
	ld	e,a
	ld	d,a
	ld	b,#0x00
	; peephole z88dk-243b1
} if notUsed('a')

replace restart {
	ld	b,#0x0F
%1:
	sra	d
	rr	e
	rr	h
	rr	l
	djnz	%1
} by {
	ld	b,a
	rl	h
	ex	de,hl
	adc	hl,hl
	sbc	a,a
	ld	e,a
	ld	d,a
	ld	a,b
	ld	b,#0x00
	; peephole z88dk-243b2
}

replace restart {
	ld	b,#0x10
%1:
	sra	l
	rr	c
	rr	d
	rr	e
	djnz	%1
} by {
	ld	d,l
	ld	e,c
	ld	a,l
	add	a,a
	sbc	a,a
	ld	l,a
	ld	c,a
	ld	b,#0x00
	; peephole z88dk-243b3
}

replace restart {
	ld	b,#0x0F
%1:
	srl	d
	rr	e
	rr	h
	rr	l
	djnz	%1
} by {
	rl	h
	ex	de,hl
	adc	hl,hl
	ld	e,#0x00
	ld	d,e
	ld	b,e
	rl	e
	; peephole z88dk-244
}

replace restart {
	ld	a,l
	add	a,#0x%1
	ld	e,a
	ld	a,h
	adc	a,#0x%2
	ld	d,a
} by {
	ld	de,#0x%2%1
	add	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-245a
} if notUsed('hl')

replace restart {
	ld	a,l
	add	a,#0x%1
	ld	e,a
	ld	a,h
	adc	a,#0x%2
	ld	d,a
} by {
	ex	de,hl
	ld	hl,#0x%2%1
	add	hl,de
	ex	de,hl
	; peephole z88dk-245b
} if notUsed('a')

replace restart {
	ld	hl,#%2
	ld	a,(hl)
	sub	a, c
	jp	NZ,%1
	inc	hl
	ld	a,(hl)
	sub	a, b
	jp	NZ,%1
} by {
	ld	hl,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	jp	NZ,%1
	; peephole z88dk-246
} if notUsed('hl')

replace restart {
	ld	a,(de)
	ld	hl,#%1
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ex	de,hl
	ld	de,#%1
	ldi
	ld	a,(hl)
	ld	(de),a
	; peephole z88dk-247a
} if notUsed('bc'), notUsed('de'), notUsed('hl')

replace restart {
	ld	a,(de)
	ld	hl,#%1
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ex	de,hl
	ld	de,#%1
	ldi
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	; peephole z88dk-247b
} if notUsed('bc')

replace restart {
	ld	a,(de)
	ld	hl,#%1
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ex	de,hl
	ld	de,#%1
	ldi
	inc	bc
	ld	a,(hl)
	ld	(de),a
	; peephole z88dk-247c
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,(de)
	ld	hl,#%1
	ld	(hl),a
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ex	de,hl
	ld	de,#%1
	ldi
	inc	bc
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	; peephole z88dk-247d
}

replace restart {
	ld	%1,(hl)
	ld	a,%1
} by {
	ld	a,(hl)
	; peephole z88dk-248
} if notUsed(%1)

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	e,a
	ld	a,#>(%1)
	adc	a, h
	ld	d,a
} by {
	ld	de,#%1
	add	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-249a
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	e,a
	ld	a,#>(%1)
	adc	a, h
	ld	d,a
} by {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
	ex	de,hl
	; peephole z88dk-249b
} if notUsed('a')

replace restart {
	ld	%1,(hl)
	ld	%2,(hl)
} by {
	ld	%1,(hl)
	ld	%2,%1
	; peephole z88dk-250
}
// if notVolatile

replace restart {
	ld	a,l
	sub	a, e
	ld	c,a
	ld	a,h
	sbc	a, d
	ld	b,a
} by {
	xor	a,a
	sbc	hl,de
	ld	c,l
	ld	b,h
	; peephole z88dk-251a
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a,e
	sub	a, l
	ld	l,a
	ld	a,d
	sbc	a, h
	ld	h,a
} by {
	ex	de,hl
	xor	a,a
	sbc	hl,de
	; peephole z88dk-251b
} if notUsed('de')

replace restart {
	ld	a,#0x%1
	sub	a, e
	ld	l,a
	ld	a,#0x%2
	sbc	a, d
	ld	h,a
} by {
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,de
	; peephole z88dk-252a
} if notUsed('a')

replace restart {
	ld	a,#0x%1
	sub	a, c
	ld	l,a
	ld	a,#0x%2
	sbc	a, b
	ld	h,a
} by {
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,bc
	; peephole z88dk-252b
} if notUsed('a')

replace restart {
	ld	c,%1 (%3)
	ld	b,%2 (%3)
	sla	c
	rl	b
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-253a
} if notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	sla	c
	rl	b
} by {
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-253b
} if notUsed('hl')

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-253c
} if notUsed('hl')

replace restart {
	ex	de,hl
	sla	e
	rl	d
} by {
	add	hl,hl
	ex	de,hl
	; peephole z88dk-253d
}

replace restart {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	sla	e
	rl	d
} by {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,hl
	ex	de,hl
	; peephole z88dk-253e
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	add	hl,bc
} by {
	ld	bc,#%1
	add	hl,bc
	; peephole z88dk-254a
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-254b
} if notUsed('de')

replace restart {
	pop	de
	push	de
	sla	e
	rl	d
} by {
	pop	hl
	push	hl
	add	hl,hl
	ex	de,hl
	; peephole z88dk-255a
} if notUsed('hl')

replace restart {
	pop	bc
	push	bc
	sla	c
	rl	b
} by {
	pop	hl
	push	hl
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-255b
} if notUsed('hl')

replace restart {
	ex	de,hl
	ld	l,%1 (%3)
	ld	h,%2 (%3)
	add	hl,de
} by {
	ld	e,%1 (%3)
	ld	d,%2 (%3)
	add	hl,de
	; peephole z88dk-256
} if notUsed('de')

replace restart {
	sla	d
	rl	e
	sla	d
	rl	e
} by {
	ld	l,d
	ld	h,e
	add	hl,hl
	add	hl,hl
	ld	d,l
	ld	e,h
	; peephole z88dk-257a
} if notUsed('hl')

replace restart {
	ld	d,l
	ld	e,h
	sla	d
	rl	e
} by {
	add	hl,hl
	ld	d,l
	ld	e,h
	; peephole z88dk-257b
} if notUsed('hl')

replace restart {
	sla	d
	rl	e
	ld	h,e
	ld	l,d
} by {
	ld	l,d
	ld	h,e
	add	hl,hl
	; peephole z88dk-257c
} if notUsed('de')

replace restart {
	ld	a,c
	add	a, e
	ld	e,a
	ld	a,b
	adc	a, d
	ld	d,a
} by {
	ex	de,hl
	add	hl,bc
	ex	de,hl
	ld	a,d
	; peephole z88dk-258a
}

replace restart {
	pop	bc
	ld	a,c
	add	a,e
	ld	c,a
	ld	a,b
	adc	a,d
	ld	b,a
} by {
	pop	hl
	add	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-258b
} if notUsed('hl')

replace restart {
	ld	%1,(hl)
	ld	(hl),%1
} by {
	ld	%1,(hl)
	; peephole z88dk-260
} // if notVolatile

replace restart {
	ld	%1,(%2)
} by {
	; peephole z88dk-261
} if notUsed(%1) 
//, notVolatile

replace restart {
	ld	e,h
	ld	d,l
	ld	l, d
	ld	h, e
} by {
	ld	e,h
	ld	d,l
	; peephole z88dk-262a
}

replace restart {
	ld	d,c
	ld	e,b
	ld	l,d
	ld	h,e
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-262b
} if notUsed('de')

replace restart {
	ld	a,#0x%1
	ld	hl,#%3
	sub	a, (hl)
	ld	d,a
	ld	a,#0x%2
	inc	hl
	sbc	a, (hl)
	ld	e,a
} by {
	ld	hl,#0x%2%1
	ld	de,(#%3)
	xor	a,a
	sbc	hl,de
	ld	e,h
	ld	d,l
	; peephole z88dk-263
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a, l
	ld	hl,#%1
	sub	a, (hl)
	ld	d,a
	ld	a,e
	inc	hl
	sbc	a, (hl)
	ld	e,a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	e,h
	ld	d,l
	; peephole z88dk-264
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	add	a, (hl)
	ld	d,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	e,a
} by {
	ld	de,(#%1)
	ld	hl,(#%2)
	add	hl,de
	ld	a,h
	ld	e,h
	ld	d,l
	ld	hl,#%2 + 1
	; peephole z88dk-265
} 

replace restart {
	ld	a,#0x%1
	ld	hl,#%3
	sub	a, (hl)
	ld	e,a
	ld	a,#0x%2
	inc	hl
	sbc	a, (hl)
	ld	d,a
} by {
	ld	de,(#%3)
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,de
	ex	de,hl
	; peephole z88dk-266
} if notUsed('a'), notUsed('hl')
	
replace restart {
	ld	a,#0x%1
	sub	a, e
	ld	e,a
	ld	a,#0x%2
	sbc	a, d
	ld	d,a
} by {
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,de
	ex	de,hl
	; peephole z88dk-267
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	%1,#0
	add	%1,sp
	ld	0 (%1),d
	ld	1 (%1),e
} by {
	ld	a,e
	ld	e,d
	ld	d,a
	pop	af
	push	de
	ld	a,e
	ld	e,d
	ld	d,a
	; peephole z88dk-268
} if notUsed('a')

replace restart {
	push	hl
	ld	a,h
	ld	%1,#%2
	add	%1,sp
	ld	0 (%1),a
	pop	hl
	push	hl
	ld	1 (%1), l
	pop	hl
} by {
	ld	a,h
	ex	de,hl
	ld	hl,#%2
	add	hl,sp
	ld	(hl),d
	inc	hl
	ld	(hl),e
	ex	de,hl
	; peephole z88dk-269a
} if notUsed('de')

replace restart {
	push	hl
	ld	a,h
	ld	%1,#%2
	add	%1,sp
	ld	0 (%1),a
	pop	hl
	push	hl
	ld	1 (%1), l
	pop	hl
} by {
	ld	c,l
	ld	a,h
	ld	hl,#%2
	add	hl,sp
	ld	(hl),a
	inc	hl
	ld	(hl),c
	ld	l,c
	ld	h,a
	; peephole z88dk-269b
} if notUsed('c')

replace restart {
	push	hl
	ld	a,h
	ld	%1,#%2
	add	%1,sp
	ld	0 (%1),a
	pop	hl
	push	hl
	ld	1 (%1), l
	pop	hl
} by {
	ld	a,h
	push	de
	ex	de,hl
	ld	hl,#%2
	add	hl,sp
	ld	(hl),d
	inc	hl
	ld	(hl),e
	ex	de,hl
	pop	de
	; peephole z88dk-269c
}

replace restart {
	ld	b,e
	ld	c,d
	sla	b
	rl	c
} by {
	ld	l,e
	ld	h,d
	add	hl,hl
	ld	b,l
	ld	c,h
	; peephole z88dk-270a
} if notUsed('hl')

replace restart {
	ld	b,l
	ld	c,h
	sla	b
	rl	c
} by {
	add	hl,hl
	ld	b,l
	ld	c,h
	; peephole z88dk-270b
} if notUsed('hl')

replace restart {
	ld	b,l
	ld	c,h
	ld	a,%1 (%3)
	add	a, b
	ld	b,a
	ld	a,%2 (%3)
	adc	a, c
	ld	c,a
	ld	l, b
	ld	h, c
} by {
	ld	c,%1 (%3)
	ld	b,%2 (%3)
	add	hl,bc
	ld	a,h
	ld	c,h
	ld	b,l
	; peephole z88dk-270c
} 

replace restart {
	ld	a,e
	add	a,#0x%1
	ld	c,a
	ld	a,d
	adc	a,#0x%2
	ld	b,a
} by {
	ld	hl,#0x%2%1
	add	hl,de
	ld	c,l
	ld	b,h
	; peephole z88dk-271
} if notUsed('hl')

//replace restart {
//	ld	hl,#%1
//	ld	(hl),#%2
//} by {
//	ld	a,#%2
//	ld	(#%1),a
//	; peephole z88dk-273
//} if notUsed('a'), notUsed('hl')

replace restart {
	ld	hl,#%3
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
} by {
	ld	hl,(#%3)
	ld	%1,l
	ld	%2,h
	; peephole z88dk-274a
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),d
	inc	hl
	ld	(hl),e
} by {
	ld	l,d
	ld	h,e
	ld	(#%1),hl
	; peephole z88dk-274b
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	(hl),b
	inc	hl
	ld	(hl),c
} by {
	ld	l,b
	ld	h,c
	ld	(#%1),hl
	; peephole z88dk-274c
} if notUsed('hl')

replace restart {
	sla	c
	rl	b
	ld	a,%1 (%3)
	add	a, c
	ld	c,a
	ld	a,%2 (%3)
	adc	a, b
	ld	b,a
	ld	l, c
	ld	h, b
} by {
	ld	l,c
	ld	h,b
	add	hl,hl
	ld	c,%1 (%3)
	ld	b,%2 (%3)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-275
}

replace restart {
	ld	b,l
	ld	c,h
	ld	a,%1 (%3)
	add	a, b
	ld	b,a
	ld	a,%2 (%3)
	adc	a, c
	ld	c,a
	ld	l, b
	ld	h, c
} by {
	ld	c,%1 (%3)
	ld	b,%2 (%3)
	add	hl,bc
	ld	a,h
	ld	b,l
	ld	c,h
	; peephole z88dk-276
}

replace restart {
	ld	l, c
	ld	h, b
	add	hl, hl
	ld	a,#<(%1)
	add	a, l
	ld	l,a
	ld	a,#>(%1)
	adc	a, h
	ld	h,a
} by {
	ld	hl,#%1
	add	hl,bc
	add	hl,bc
	ld	a,h
	; peephole z88dk-277
}

replace restart {
	ld	l, e
	ld	h, d
	inc	de
	ld	a,#<(%1)
	add	a, l
	ld	l,a
	ld	a,#>(%1)
	adc	a, h
	ld	h,a
} by {
	ld	hl,#%1
	add	hl,de
	ld	a,h
	inc	de
	; peephole z88dk-278
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%3
	add	a, (hl)
	ld	e,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	d,a
} by {
	ld	hl,(#%3)
	ld	de,#%1
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%3 + 1
	; peephole z88dk-279
}

replace restart {
	ex	de,hl
	ld	hl,#%1
	ld	a,(de)
} by {
	ld	a,(hl)
	ld	hl,#%1
	; peephole z88dk-280a
} if notUsed('de')

replace restart {
	ex	de,hl
	ld	hl,#%1 + %2
	ld	a,(de)
} by {
	ld	a,(hl)
	ld	hl,#%1 + %2
	; peephole z88dk-280b
} if notUsed('de')

replace restart {
	ld	a,(hl)
	ld	(#%1),a
	ld	a,(#%2 + 1)
	ld	hl,#%1 + 1
	ld	(hl),a
} by {
	ld	hl,(#%2)
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-281  Warning may lead to incorrect code
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, #0x%2
	inc	hl
	ld	a,(hl)
	sbc	a, #0x%3
	jp	%4,%5
	ld	a,#<(%6)
	dec	hl
} by {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, #0x%2
	inc	hl
	ld	a,(hl)
	sbc	a, #0x%3
	jp	%4,%5
	ld	a,#<(%6)
	ld	hl,#%1
	; peephole z88dk-283
}

replace restart {
	ld	hl,#%1 + 1
	ld	a,%2
	ld	(de),a
	dec	hl
} by {
	ld	a,%2
	ld	(de),a
	ld	hl,#%1
	; peephole z88dk-284
} if notSame(%2 'h' 'l' 'hl' '(hl)')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, %2 (ix)
	inc	hl
	ld	a,(hl)
	sbc	a, %3 (ix)
} by {
	ld	hl,(#%1)
	ld	a,l
	sub	a, %2 (ix)
	ld	a,h
	sbc	a, %3 (ix)
	; peephole z88dk-286
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + 1
	inc	hl
} by {
	ld	hl,#%1 + 2
	; peephole z88dk-287a
}

replace restart {
	ld	hl,#%1 + 1
	dec	hl
} by {
	ld	hl,#%1
	; peephole z88dk-287b
}

replace restart {
	ld	hl,#%1
	rl	(hl)
	inc	hl
	rl	(hl)
} by {
	ld	hl,(#%1)
	adc	hl,hl
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-288a
}

replace restart {
	ld	hl,#%1 + 1
	dec	hl
	rl	(hl)
	inc	hl
	rl	(hl)
} by {
	ld	hl,(#%1)
	adc	hl,hl
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-288b
}

replace restart {
	ld	b,#%1
%2:
	ld	hl,(#%3)
	add	hl,hl
	ld	(#%3),hl
	ld	hl,(#%3 + 2)
	adc	hl,hl
	ld	(#%3 + 2),hl
	djnz	%2
} by {
	ld	b,#%1
%2:
	ld	hl,(#%3)
	ld	de,(#%3 + 2)
lz_%2:
	add	hl,hl
	rl	e
	rl	d
	djnz	lz_%2
	ld	(#%3),hl
	ld	(#%3 + 2),de
	ex	de,hl
	; peephole z88dk-289a
} if notUsed('de')
//, notVolatile

replace restart {
	ld	b,#%1
%2:
	ld	hl,(#%3)
	add	hl,hl
	ld	(#%3),hl
	ld	hl,(#%3 + 2)
	adc	hl,hl
	ld	(#%3 + 2),hl
	djnz	%2
} by {
	ld	b,#%1
%2:
	push	de
	ld	hl,(#%3)
	ld	de,(#%3 + 2)
lz_%2:
	add	hl,hl
	rl	e
	rl	d
	djnz	lz_%2
	ld	(#%3),hl
	ld	(#%3 + 2),de
	ex	de,hl
	pop	de
	; peephole z88dk-289b
}
// if notVolatile

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sbc	a, (hl)
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sbc	a, (hl)
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	hl,(#%1 + 2)
	ld	de,(#%2 + 2)
	sbc	hl,de
	ld	a,h
	ld	hl,#%2 + 3
	; peephole z88dk-290a
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sbc	a, (hl)
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sbc	a, (hl)
} by {
	ld	hl,(#%1)
	ld	bc,(#%2)
	xor	a,a
	sbc	hl,bc
	ld	hl,(#%1 + 2)
	ld	bc,(#%2 + 2)
	sbc	hl,bc
	ld	a,h
	ld	hl,#%2 + 3
	; peephole z88dk-290b
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	ld	%3,(#%2)
	inc	hl
	ld	%4,(hl)
} by {
	ld	%3,(#%2)
	ld	hl,#%1 + 1
	ld	%4,(hl)
	; peephole z88dk-291a
} if notSame(%3 'hl')

replace restart {
	ld	hl,#%1 + 1
	ld	%3,(#%2)
	inc	hl
	ld	%4,(hl)
} by {
	ld	%3,(#%2)
	ld	hl,#%1 + 2
	ld	%4,(hl)
	; peephole z88dk-291b
} if notSame(%3 'hl')

replace restart {
	ld	hl,#%1
	ld	%3,(#%2)
	dec	hl
	ld	%4,(hl)
} by {
	ld	%3,(#%2)
	ld	hl,#%1 - 1
	ld	%4,(hl)
	; peephole z88dk-291c
} if notSame(%3 'hl')

replace restart {
	ld	hl,#%1 + 1
	ld	%3,(#%2)
	dec	hl
	ld	%4,(hl)
} by {
	ld	%3,(#%2)
	ld	hl,#%1
	ld	%4,(hl)
	; peephole z88dk-291d
} if notSame(%3 'hl')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	d,a
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	e,a
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	d,l
	ld	e,h
	ld	hl,#%2 + 1
	; peephole z88dk-292
}

replace restart {
	ld	hl,#%1 + 1
	ld	%2,%3
	dec	hl
} by {
	ld	%2,%3
	ld	hl,#%1
	; peephole z88dk-293
} if operandsNotRelated(%2 'hl'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	h,e
	ld	l,d
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-294a
} if notUsed('de')

replace restart {
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	h,e
	ld	l,d
	ld	bc,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-294b
} if notUsed('bc')

replace restart {
	ld	%3,(#%1)
	add	hl,%3
	ld	(#%2),%4
	ld	%3,(#%1)
} by {
	ld	%3,(#%1)
	add	hl,%3
	ld	(#%2),%4
	; peephole z88dk-295a
} if notSame(%1 %2), notSame(%3 'hl')
// if notVolatile

replace restart {
	ld	(#%1),%2
	ld	%2,(#%1)
} by {
	ld	(#%1),%2
	; peephole z88dk-295b
}
// if notVolatile

replace restart {
	ld	(#%1),hl
	ld	hl,(#%2)
	ld	de,(#%1)
} by {
	ld	(#%1),hl
	ex	de,hl
	ld	hl,(#%2)
	; peephole z88dk-295d
}
// if notVolatile

replace restart {
	ld	%4,%2 (%1)
	ld	%5,%3 (%1)
	ld	l, %4
	ld	h, %5
} by {
	ld	l,%2 (%1)
	ld	h,%3 (%1)
	; peephole z88dk-296
} if notUsed(%4), notUsed(%5)

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	c,a
	ld	a,#>(%1)
	adc	a, h
	ld	b,a
} by {
	ld	bc,#%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-297a
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	e,a
	ld	a,#>(%1)
	adc	a, h
	ld	d,a
} by {
	ld	de,#%1
	add	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-297b
} if notUsed('hl')

replace restart {
	ld	de,(#%1)
	ld	hl,#%2
	add	hl,de
	ex	de,hl
} by {
	ld	hl,(#%1)
	ld	de,#%2
	add	hl,de
	ex	de,hl
	; peephole z88dk-298a
} if notUsed('hl')

replace restart {
	ld	de,(#%1)
	ld	hl,#%2
	add	hl,de
} by {
	ld	hl,(#%1)
	ld	de,#%2
	add	hl,de
	; peephole z88dk-298b
} if notUsed('de')

replace restart {
	ld	bc,(#%1)
	ld	hl,#%2
	add	hl,bc
} by {
	ld	hl,(#%1)
	ld	bc,#%2
	add	hl,bc
	; peephole z88dk-298c
} if notUsed('bc')

//replace restart {
//	ld	hl,#%1
//	rl	(hl)
//	inc	hl
//	rl	(hl)
//} by {
//	ld	hl,(#%1)
//	adc	hl,hl
//	ld	(#%1),hl
//	ld	hl,#%1 + 1
//	; peephole z88dk-299a
//}

//replace restart {
//	ld	hl,#%1 + 2
//	rl	(hl)
//	inc	hl
//	rl	(hl)
//} by {
//	ld	hl,(#%1 + 2)
//	adc	hl,hl
//	ld	(#%1 + 2),hl
//	ld	hl,#%1 + 3
//	; peephole z88dk-299b1
//}

//replace restart {
//	ld	hl,#%1 + %2
//	rl	(hl)
//	inc	hl
//	rl	(hl)
//} by {
//	ld	hl,(#%1 + %2)
//	adc	hl,hl
//	ld	(#%1 + %2),hl
//	ld	hl,#%1 + %2+1
//	; peephole z88dk-229b2
//}

replace restart {
%1:
	ld	hl,(#%1)
	add	hl,hl
	ld	(#%1),hl
	ld	hl,(#%1 + 2)
	adc	hl,hl
	ld	(#%1 + 2),hl
	djnz	%1
} by {
	ld	hl,(#%1)
	ld	de,(#%1 + 2)
%1:
	add	hl,hl
	rl	e
	rl	d
	djnz	%1
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ex	de,hl
	; peephole z88dk-299c
} if notUsed('de')

replace restart {
%1:
	ld	hl,(#%1)
	add	hl,hl
	ld	(#%1),hl
	ld	hl,(#%1 + 2)
	adc	hl,hl
	ld	(#%1 + 2),hl
	djnz	%1
} by {
	push	de
	ld	hl,(#%1)
	ld	de,(#%1 + 2)
%1:
	add	hl,hl
	rl	e
	rl	d
	djnz	%1
	ld	(#%1),hl
	ld	(#%1 + 2),de
	ex	de,hl
	pop	de
	; peephole z88dk-299d
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sbc	a, (hl)
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sbc	a, (hl)
} by {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	inc	hl
	sbc	a, (hl)
	ld	a,(#%1 + 2)
	inc	hl
	sbc	a, (hl)
	ld	a,(#%1 + 3)
	inc	hl
	sbc	a, (hl)
	; peephole z88dk-300a
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	ld	hl,#%2 + 1
	sbc	a, (hl)
} by {
	ld	a,(#%1)
	ld	hl,#%2
	sub	a, (hl)
	ld	a,(#%1 + 1)
	inc	hl
	sbc	a, (hl)
	; peephole z88dk-300b
}

replace restart {
	ld	a,(#%3)
	ld	hl,#%4
	sub	a, (hl)
	jp	%1,%2
	ld	a,(#%3 + 1)
	ld	hl,#%4 + 1
	sub	a, (hl)
	jp	%1,%5
	ld	a,(#%3 + 2)
	ld	hl,#%4 + 2
	sub	a, (hl)
	jp	%1,%6
	ld	a,(#%3 + 3)
	ld	hl,#%4 + 3
	sub	a, (hl)
	jp	%8,%7
} by {
	ld	a,(#%3)
	ld	hl,#%4
	sub	a, (hl)
	jp	%1,%2
	ld	a,(#%3 + 1)
	inc	hl
	sub	a, (hl)
	jp	%1,%5
	ld	a,(#%3 + 2)
	inc	hl
	sub	a, (hl)
	jp	%1,%6
	ld	a,(#%3 + 3)
	inc	hl
	sub	a, (hl)
	jp	%8,%7
	; peephole z88dk-301a
}

replace restart {
	ld	a,(#%3)
	ld	hl,#%4
	sub	a, (hl)
	jp	%1,%2
	ld	a,(#%3 + 1)
	ld	hl,#%4 + 1
	sub	a, (hl)
	jp	%6,%5
} by {
	ld	a,(#%3)
	ld	hl,#%4
	sub	a, (hl)
	jp	%1,%2
	ld	a,(#%3 + 1)
	inc	hl
	sub	a, (hl)
	jp	%6,%5
	; peephole z88dk-301b
}

replace restart {
	ld	hl,#%1
	ld	(hl),#0x%2
	xor	a, a
	inc	hl
	ld	(hl),a
	inc	hl
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x00%2
	ld	(#%1),hl
	ld	l,h
	ld	(#%1 + 2),hl
	ld	a,l
	ld	hl,#%1 + 3
	; peephole z88dk-302
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, #0x%2
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a, #0x%3
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	de,#0x%3%2
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-303
}

replace restart {
	push	hl
	dec	hl
	ld	a,(hl)
	ld	(#%1),a
	ld	a,(#%2 + 1)
	ld	(#%1 + 1),a
	pop	hl
} by {
	ld	hl,(#%2)
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-304  Warning may lead to incorrect code
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(%1 + %2),bc
} by {
	ld	(%1 + %2),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-305a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(%1 + %2 + %3),bc
} by {
	ld	(%1 + %2 + %3),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-305b
}

replace restart {
	ld	e,l
	ld	d,h
	ld	(%1 + %2),de
} by {
	ld	(%1 + %2),hl
	ld	e,l
	ld	d,h
	; peephole z88dk-305c
}

replace restart {
	ld	e,l
	ld	d,h
	ld	(%1 + %2 + %3),de
} by {
	ld	(%1 + %2 + %3),hl
	ld	e,l
	ld	d,h
	; peephole z88dk-305d
}

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-306
} if notUsed('de')

replace restart {
	ld	b,#0x0F
%1:
	sra	%2
	rr	%3
	rr	%4
	rr	%5
	djnz	%1
} by {
	rl	%4
	rl	%3
	rl	%2
	ld	%5,%3
	ld	%4,%2
	sbc	a,a
	ld	%3,a
	ld	%2,a
	ld	b,0
	; peephole z88dk-307
} if notUsed('a')
// labelRefCount

replace restart {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-308a
} if notUsed('de')

replace restart {
	ex	de,hl
	ld	hl,#%1 + %2
	add	hl,de
} by {
	ld	de,#%1 + %2
	add	hl,de
	; peephole z88dk-308b
} if notUsed('de')

replace restart {
	ex	de,hl
	ld	hl,#%1
	ex	de,hl
} by {
	ld	de,#%1
	; peephole z88dk-309a
}

replace restart {
	ex	de,hl
	ld	hl,#%1 + %2
	ex	de,hl
} by {
	ld	de,#%1 + %2
	; peephole z88dk-309b
}

replace restart {
	ld	(#%1),hl
	ld	hl,#%1 + 1
	ld	a,(hl)
	dec	hl
	or	a,(hl)
} by {
	ld	(#%1),hl
	ld	a,h
	or	a,l
	ld	hl,#%1
	; peephole z88dk-310a
}
// if notVolatile

replace restart {
	ld	(#%1),hl
	ld	hl,#%1
	ld	a,(hl)
	inc	hl
	or	a,(hl)
} by {
	ld	(#%1),hl
	ld	a,l
	or	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-310b
}
// if notVolatile

//replace restart {
//	ld	bc,#0xFFFF
//	add	hl,bc
//	ex	de,hl
//	ld	bc,#0xFFFF
//	adc	hl,bc
//} by {
//	ex	de,hl
//	ld	a,d
//	or	a,e
//	dec	de
//	jr	NZ,#0x01
//	dec	hl
//	ld	bc,#0xFFFF
//	; peephole z88dk-311a  INCORRECT IF FLAGS USED
//}
// jr is unsafe

replace restart {
	ld	bc,#0xFFFF
	add	hl,bc
	ex	de,hl
	ld	bc,#0xFFFF
	adc	hl,bc
} by {
	ld	bc,#0xFFFF
	add	hl,bc
	ex	de,hl
	adc	hl,bc
	; peephole z88dk-311b
}

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-312a
} if notUsed('de')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	d,l
	ld	e,h
	ld	bc,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-312b
} if notUsed('bc')

replace restart {
	ld	l, e
	ld	h, d
	ld	bc, #%1
	add	hl, bc
} by {
	ld	hl,#%1
	add	hl,de
	; peephole z88dk-313a
} if notUsed('bc')

replace restart {
	ld	l, c
	ld	h, b
	ld	de, #%1
	add	hl, de
} by {
	ld	hl,#%1
	add	hl,bc
	; peephole z88dk-313b
} if notUsed('de')

replace restart {
	ld	b,%3
	ld	a,#<(%1)
	add	a, c
	ld	l,a
	ld	a,#>(%1)
	adc	a, #%2
	ld	h,a
} by {
	ld	b,#%2
	ld	hl,#%1
	add	hl,bc
	ld	a,h
	ld	b,%3
	; peephole z88dk-314a
} if notSame(%3 'a' 'l' 'h')

replace restart {
	ld	d,%3
	ld	a,#<(%1)
	add	a, e
	ld	l,a
	ld	a,#>(%1)
	adc	a, #%2
	ld	h,a
} by {
	ld	d,#%2
	ld	hl,#%1
	add	hl,de
	ld	a,h
	ld	d,%3
	; peephole z88dk-314b
} if notSame(%3 'a' 'l' 'h')

replace restart {
	ld	de,#%1
	ld	bc,#%1
} by {
	ld	de,#%1
	ld	c,e
	ld	b,d
	; peephole z88dk-315a
}

replace restart {
	ld	bc,#%1
	ld	de,#%1
} by {
	ld	bc,#%1
	ld	e,c
	ld	d,b
	; peephole z88dk-315b
}

replace restart {
	ld	hl,#%1
	ld	de,#%1
} by {
	ld	hl,#%1
	ld	e,l
	ld	d,h
	; peephole z88dk-315c
}

replace restart {
	ld	de,#%1
	ld	hl,#%1
} by {
	ld	de,#%1
	ld	l,e
	ld	h,d
	; peephole z88dk-315d
}

replace restart {
	ld	a,e
	add	a,#0x%1
	ld	e,a
	ld	a,d
	adc	a,#0x%2
	ld	d,a
} by {
	ld	hl,#0x%2%1
	add	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-316
} if notUsed('hl')

replace restart {
	ld	b,l
	ld	c,h
	ld	e, b
	ld	d, c
} by {
	ld	b,l
	ld	c,h
	ld	e,l
	ld	d,h
	; peephole z88dk-318a
}

replace restart {
	ld	%1,%2
	or	a,%1
} by {
	ld	%1,%2
	or	a,%2
	; peephole z88dk-318b
} if notSame(%1 'a'), notSame(%2 '(hl)'), notVolatile(%1)


replace restart {
	ld	a,d
	add	a, #0x%1
	ld	b,a
	ld	a,e
	adc	a, #0x%2
	ld	c,a
	ld	l, b
	ld	h, c
} by {
	ld	l,d
	ld	h,e
	ld	bc,#0x%2%1
	add	hl,bc
	ld	a,h
	ld	b,l
	ld	c,h
	; peephole z88dk-319a
}

replace restart {
	ld	d,c
	ld	hl,#%1
	ld	a,(hl)
	add	a, d
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, b
	ld	(hl),a
} by {
	ld	d,c
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-319b
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	add	hl,bc
} by {
	ld	bc,%1
	add	hl,bc
	; peephole z88dk-319c
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	ld	hl,%1
	add	hl,de
} by {
	ld	de,%1
	add	hl,de
	; peephole z88dk-319d
} if notUsed('de')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-320a
} if notUsed('de')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	d,l
	ld	e,h
	ld	bc,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-320b
} if notUsed('bc')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	ld	hl,#%1 + 1
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,e
	inc	hl
	sbc	a, (hl)
	ld	(#%2 + 1),a
	; peephole z88dk-320c
}

replace restart {
	ld	a,#<(%1)
	add	a, %2 (%4)
	ld	d,a
	ld	a,#>(%1)
	adc	a, %3 (%4)
	ld	e,a
	ld	l, d
	ld	h, e
} by {
	ld	l, %2 (%4)
	ld	h, %3 (%4)
	ld	de,#%1
	add	hl,de
	ld	a,h
	ld	d,l
	ld	e,h
	; peephole z88dk-321a
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, #0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, #0x%3
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	de,#0x%3%2
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-322a
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, #0x%2
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, #0x%3
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	bc,#0x%3%2
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-322b
} if notUsed('bc')

replace restart {
	ld	hl,#%1 + 1
	ld	%2,(hl)
	dec	hl
	ld	l, (hl)
	ld	h, %2
} by {
	ld	hl,(#%1)
	ld	%2,h
	; peephole z88dk-323
}

replace restart {
	ld	hl,#%4
	ld	%1,(hl)
	inc	hl
	ld	%2,(hl)
	dec	hl
	ld	%3,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,%3
} by {
	ld	hl,(#%4)
	ld	%1,l
	ld	%2,h
	ld	%3,l
	; peephole z88dk-324
} if notSame(%1 'h' 'l'), notSame(%2 'h' 'l'), notSame(%3 'h' 'l')
// if notVolatile

replace restart {
	ld	%1,(%2)
	ld	%4,%5
	ld	%3,(%2)
} by {
	ld	%1,(%2)
	ld	%4,%5
	ld	%3,%1
	; peephole z88dk-325
} if notSame(%4 %1 %2), operandsNotRelated(%4 %2), canAssign(%3 %1)
// if notVolatile

replace restart {
	ld	hl,#%1 + 1
	ld	a,(de)
	ld	d,a
	rla
	sbc	a, a
	ld	e,a
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
} by {
	ld	a,(de)
	ld	d,a
	rla
	sbc	a, a
	ld	e,a
	ld	bc,(#%1)
	ld	hl,#%1
	; peephole z88dk-326a
}

replace restart {
	ld	de,(#%1)
	ld	hl,#%2 + 1
	ld	a,(de)
	ld	d,a
	dec	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	de,(#%1)
	ld	a,(de)
	ld	d,a
	ld	(#%2),bc
	ld	hl,#%2 + 1
	; peephole z88dk-326b
}

replace restart {
	ld	de,(#%1)
	ld	hl,#%2 + 1
	ld	a,(de)
	ld	%3,a
	dec	hl
} by {
	ld	de,(#%1)
	ld	a,(de)
	ld	%3,a
	ld	hl,#%2
	; peephole z88dk-326c
} if notSame(%3 '(hl)' 'l' 'h')

replace restart {
	ld	(#%1),hl
	ld	hl,#%1 + 1
	bit	%2,(hl)
} by {
	ld	(#%1),hl
	bit	%2,h
	ld	hl,#%1 + 1
	; peephole z88dk-327
}
// if notVolatile

replace restart {
	ld	bc,(#%1)
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	ld	c,l
	ld	b,h
	; peephole z88dk-328a
}

replace restart {
	ld	bc,(#%1)
	inc	bc
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	inc	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-328b
}

replace restart {
	ld	bc,(#%1)
	inc	bc
	inc	bc
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-328c
}

replace restart {
	ld	bc,(#%1)
	inc	bc
	inc	bc
	inc	bc
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	inc	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-328d
}

replace restart {
	ld	bc,(#%1)
	inc	bc
	inc	bc
	inc	bc
	inc	bc
	ld	l, c
	ld	h, b
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-328e
}

replace restart {
	ld	de,(#%1)
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	ld	e,l
	ld	d,h
	; peephole z88dk-329a
}

replace restart {
	ld	de,(#%1)
	inc	de
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	inc	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-329b
}

replace restart {
	ld	de,(#%1)
	inc	de
	inc	de
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-329c
}

replace restart {
	ld	de,(#%1)
	inc	de
	inc	de
	inc	de
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	inc	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-329d
}

replace restart {
	ld	de,(#%1)
	inc	de
	inc	de
	inc	de
	inc	de
	ld	l, e
	ld	h, d
} by {
	ld	hl,(#%1)
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-329e
}

replace restart {
	ld	a,c
	add	a,#0x%2
	ld	hl,#%1
	ld	(hl),a
	ld	a,b
	adc	a,#0x%3
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x%3%2
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-330a
}

replace restart {
	ld	a,e
	add	a,#0x%2
	ld	hl,#%1
	ld	(hl),a
	ld	a,d
	adc	a,#0x%3
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x%3%2
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-330b
}

replace restart {
	ld	%1,l
	ld	%2,h
	ld	%4 (%3),%1
	ld	%5 (%3),%2
	ld	l, %1
	ld	h, %2
} by {
	ld	%1,l
	ld	%2,h
	ld	%4 (%3),l
	ld	%5 (%3),h
	; peephole z88dk-331
}

replace restart {
	ld	%1,(hl)
	ld	%2,%3 
	ld	l, %1
	ld	h, %2
} by {
	ld	l,(hl)
	ld	h,%3
	ld	%1,l
	ld	%2,h
	; peephole z88dk-332
} if notSame(%3 '(hl)' 'l' 'h' %1), notSame(%2 '(hl)' 'l' 'h' %1)
// if notVolatile

replace restart {
	ld	%1,%2
	ld	%3,%4
	ld	%2,%1
} by {
	ld	%1,%2
	ld	%3,%4
	; peephole z88dk-333
} if notSame(%3 %1 %2), notSame(%4 %1 %2), operandsNotRelated(%2 %3), operandsNotRelated(%1 %3)
// if notVolatile

replace restart {
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sub	a, (hl)
	jp	%3,%4
	ld	a,(#%1 + 3)
	ld	hl,#%2 + 3
	sub	a, (hl)
} by {
	ld	a,(#%1 + 2)
	ld	hl,#%2 + 2
	sub	a, (hl)
	jp	%3,%4
	ld	a,(#%1 + 3)
	inc	hl
	sub	a, (hl)
	; peephole z88dk-334
}

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3 + %4)
	ld	(#%5 + %6),hl
	pop	hl
} by {
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3 + %4)
	ld	(#%5 + %6),hl
	; peephole z88dk-335a
} if notUsed('hl')

replace restart {
	push	hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3 + %4)
	ld	(#%5 + %6),hl
	pop	hl
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	(#%2),hl
	ld	hl,(#%3 + %4)
	ld	(#%5 + %6),hl
	ex	de,hl
	; peephole z88dk-335b
} if notUsed('de')

replace restart {
	ld	%1, a
	%2	%1
	ld	a,%3 (%4)
	add	a, %1
} by {
	%2	a
	add	a,%3 (%4)
	; peephole z88dk-336
} if notSame(%1 '(hl)'), notUsed(%1)

replace restart {
	ld	a,%1 (%2)
	or	a, a
	jp	%3,%4
	ld	a,%1 (%2)
} by {
	ld	a,%1 (%2)
	or	a, a
	jp	%3,%4
	; peephole z88dk-337a
}
// if notVolatile

replace restart {
	ld	a,%1
	or	a, a
	jp	%3,%4
	ld	a,%1
} by {
	ld	a,%1
	or	a, a
	jp	%3,%4
	; peephole z88dk-337b
}
// if notVolatile

replace restart {
	ld	c,l
	ld	b,h
	ld	a,(de)
	ld	(bc),a
} by {
	ld	a,(de)
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole z88dk-338
}

replace restart {
	ld	hl,#%1
	ld	%3,%4
} by {
	ld	%3,%4
	ld	hl,#%1
	; peephole z88dk-339a
} if operandsNotRelated(%3 'hl'), operandsNotRelated(%4 'hl')

replace restart {
	ld	hl,#%1 + %2
	ld	%3,%4
} by {
	ld	%3,%4
	ld	hl,#%1 + %2
	; peephole z88dk-339b
} if operandsNotRelated(%3 'hl'), operandsNotRelated(%4 'hl')

replace restart {
	ld	hl,#%1
	xor	a,%3
} by {
	xor	a,%3
	ld	hl,#%1
	; peephole z88dk-339c
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1 + %4
	xor	a,%3
} by {
	xor	a,%3
	ld	hl,#%1 + %4
	; peephole z88dk-339d
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1
	inc	%3
} by {
	inc	%3
	ld	hl,#%1
	; peephole z88dk-339e
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1
	dec	%3
} by {
	dec	%3
	ld	hl,#%1
	; peephole z88dk-339f
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1 + %2
	inc	%3
} by {
	inc	%3
	ld	hl,#%1 + %2
	; peephole z88dk-339g
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1 + %2
	dec	%3
} by {
	dec	%3
	ld	hl,#%1 + %2
	; peephole z88dk-339h
} if operandsNotRelated(%3 'hl')

replace restart {
	ex	de,hl
	xor	a,a
} by {
	xor	a,a
	ex	de,hl
	; peephole z88dk-340a
}

replace restart {
	ex	de,hl
	ld	(de),a
} by {
	ld	(hl),a
	ex	de,hl
	; peephole z88dk-340b
}

replace restart {
	ex	de,hl
	inc	%1
} by {
	inc	%1
	ex	de,hl
	; peephole z88dk-340c
} if notSame(%1 'd' 'e' 'h' 'l' 'de' 'hl' '(hl)')

replace restart {
	ex	de,hl
	dec	%1
} by {
	dec	%1
	ex	de,hl
	; peephole z88dk-340d
} if notSame(%1 'd' 'e' 'h' 'l' 'de' 'hl' '(hl)')

replace restart {
	ld	%1,h
	ex	de,hl
} by {
	ex	de,hl
	ld	%1,d
	; peephole z88dk-340e
} if notSame(%1 'l' 'h' 'e' 'd')

replace restart {
	ld	%1,l
	ex	de,hl
} by {
	ex	de,hl
	ld	%1,e
	; peephole z88dk-340f
} if notSame(%1 'l' 'h' 'e' 'd')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	e,a
	ld	a,#>(%1)
	adc	a, #%3
	ld	d,a
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	de,#%1
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%2
	; peephole z88dk-341a
}

replace restart {
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
} by {
	ld	%2,%3
	ld	%4,%5
	; peephole z88dk-342a
} if operandsNotRelated(%2 %1), operandsNotRelated(%4 %1), notSame(%1 'af')

replace restart {
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
} by {
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	; peephole z88dk-342b
} if operandsNotRelated(%2 %6), operandsNotRelated(%4 %6), notSame(%6 'af')

replace restart {
	push	%7
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	pop	%7
} by {
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	; peephole z88dk-342c
} if operandsNotRelated(%2 %7), operandsNotRelated(%4 %7), notSame(%7 'af')

replace restart {
	push	%8
	push	%7
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	pop	%7
	pop	%8
} by {
	push	%7
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	pop	%7
	; peephole z88dk-342d
} if operandsNotRelated(%2 %8), operandsNotRelated(%4 %8), notSame(%8 'af')

replace restart {
	push	%9
	push	%8
	push	%7
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	pop	%7
	pop	%8
	pop	%9
} by {
	push	%8
	push	%7
	push	%6
	push	%1
	ld	%2,%3
	ld	%4,%5
	pop	%1
	pop	%6
	pop	%7
	pop	%8
	; peephole z88dk-342e
} if operandsNotRelated(%2 %9), operandsNotRelated(%4 %9), notSame(%9 'af')

replace restart {
	ld	b,l
	ld	c,h
	ld	a,e
	add	a, b
	ld	e,a
	ld	a,d
	adc	a, c
	ld	d,a
} by {
	ld	b,l
	ld	c,h
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	l,b
	ld	h,c
	; peephole z88dk-343
}

replace restart {
	ld	hl,#%1
	ld	l,(hl)
} by {
	ld	hl,(#%1)
	ld	h,#>(%1)
	; peephole z88dk-344
}

replace restart {
	ld	%1,#>(%2)
} by {
	; peephole z88dk-345a
} if notUsed(%1), notSame(%1 '(hl)')

replace restart {
	ld	%1,#<(%2)
} by {
	; peephole z88dk-345b
} if notUsed(%1), notSame(%1 '(hl)')

replace restart {
	ld	d,l
	ld	e,h
	ld	bc,%1
	ld	l, d
	ld	h, e
} by {
	ld	d,l
	ld	e,h
	ld	bc,%1
	; peephole z88dk-346a
}

replace restart {
	ld	d,l
	ld	e,h
	pop	%1
	ld	a,e
	or	a,d
} by {
	ld	d,l
	ld	e,h
	pop	%1
	ld	a,h
	or	a,l
	; peephole z88dk-346b
} if notSame(%1 'hl' 'de')

replace restart {
	ld	c,l
	ld	b,h
	ld	%1,(#%2)
	push	bc
} by {
	ld	%1,(#%2)
	push	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-346c
} if notSame(%1 'bc' 'hl')

replace restart {
	ld	a,%1 (%2)
	ld	hl,#%4
	add	a, (hl)
	ld	e,a
	ld	a,%3 (%2)
	inc	hl
	adc	a, (hl)
	ld	d,a
} by {
	ld	e,%1 (%2)
	ld	d,%3 (%2)
	ld	hl,(#%4)
	add	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%4 + 1
	; peephole z88dk-347a
}

replace restart {
	ld	hl,#%4
	ld	d,(hl)
	inc	hl
	ld	e,(hl)
	ld	a,d
	add	a, %1 (%2)
	dec	hl
	ld	(hl),a
	ld	a,e
	adc	a, %3 (%2)
	inc	hl
	ld	(hl),a
} by {
	ld	hl,(#%4)
	ld	e,%1 (%2)
	ld	d,%3 (%2)
	add	hl,de
	ld	a,h
	ld	(#%4),hl
	ld	hl,#%4 + 1
	; peephole z88dk-347b
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	b,(hl)
	inc	hl
	ld	c,(hl)
	ld	a,b
	add	a, e
	dec	hl
	ld	(hl),a
	ld	a,c
	adc	a, d
	inc	hl
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	b,l
	ld	c,h
	add	hl,de
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-347c
}

replace restart {
	ld	hl,(#%1)
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%2
	add	a, (hl)
	ld	(#%1),a
	ld	a,e
	ld	hl,#%2 + 1
	adc	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	de,(#%1)
	ld	hl,(#%2)
	add	hl,de
	ld	a,d
	ld	d,e
	ld	e,a
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-347d
}

replace restart {
	ld	%1,%6
	ld	%2,%7
	ld	%3 (%5),%1
	ld	%4 (%5),%2
} by {
	ld	%1,%6
	ld	%2,%7
	ld	%3 (%5),%6
	ld	%4 (%5),%7
	; peephole z88dk-348a
} if canAssign(%3 %5 %6), canAssign(%4 %5 %7), operandsNotRelated(%2 %6), operandsNotRelated(%2 %1)

replace restart {
	ld	%1,%3 (%5)
	ld	%2,%4 (%5)
	ld	l, %1
	ld	h, %2
} by {
	ld	l,%3 (%5)
	ld	h,%4 (%5)
	ld	%1,l
	ld	%2,h
	; peephole z88dk-348b
} if notSame(%1 %2), operandsNotRelated(%1 'hl'), operandsNotRelated(%2 'hl')

replace restart {
	ld	b,#0x10
	ld	hl,#%1
%2:
	srl	h
	rr	l
	rr	%3
	rr	%4
	djnz	%2
} by {
	ld	%3,h
	ld	%4,l
	ld	l,#0x00
	ld	h,l
	ld	b,l
	; peephole z88dk-349a
}

replace restart {
	ld	b,#0x10
%1:
	srl	d
	rr	e
	rr	h
	rr	l
	djnz	%1
} by {
	ex	de,hl
	ld	e,#0x00
	ld	d,e
	ld	b,e
	; peephole z88dk-349b
}

replace restart {
	pop	de
	ld	l, e
	ld	h, d
} by {
	pop	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-350a
}

replace restart {
	pop	bc
	ld	l, c
	ld	h, b
} by {
	pop	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-350b
}

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	ld	(#%1 + %2),de
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-351a
}

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	(#%1 + %2),bc
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-351b
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(#%1),bc
} by {
	ld	(#%1),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-352
}

replace restart {
	ld	b,l
	ld	c,h
	ld	a,b
	add	a,#0x%1
	ld	l,a
	ld	a,c
	adc	a,#0x%2
	ld	h,a
} by {
	ld	bc,#0x%2%1
	add	hl,bc
	ld	a,h
	; peephole z88dk-353a
} if notUsed('bc')

replace restart {
	ld	a,e
	adc	a,#0x%1
	ld	e,a
	ld	a,d
	adc	a,#0x%2
	ld	d,a
} by {
	ld	hl,#0x%2%1
	adc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-353b
} if notUsed('hl')

replace restart {
	ld	a,e
	adc	a,#0x%1
	ld	e,a
	ld	a,d
	adc	a,#0x%2
	ld	d,a
} by {
	ex	de,hl
	ld	bc,#0x%2%1
	adc	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-353c
} if notUsed('bc')

replace restart {
	ld	d,l
	ld	e,h
	ld	a,d
	ld	hl,#%1
	sub	a, (hl)
	ld	d,a
	ld	a,e
	inc	hl
	sbc	a, (hl)
	ld	e,a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	d,l
	ld	e,h
	ld	hl,#%1 + 1
	; peephole z88dk-354a
}

replace restart {
	ld	d,l
	ld	e,h
	ld	hl,#%1
	ld	a,(hl)
	sub	a, d
	inc	hl
	ld	a,(hl)
	sbc	a, e
} by {
	ex	de,hl
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-354b
} if notUsed('de')

replace restart {
	push	af
	ld	%1 (%5),%6
	ld	%2 (%5),%7
	ld	%3 (%5),%8
	ld	%4 (%5),%9
	pop	af
} by {
	ld	%1 (%5),%6
	ld	%2 (%5),%7
	ld	%3 (%5),%8
	ld	%4 (%5),%9
	; peephole z88dk-355a
}

replace restart {
	push	af
	ld	%1 (%5),%6
	ld	%2 (%5),%7
	pop	af
} by {
	ld	%1 (%5),%6
	ld	%2 (%5),%7
	; peephole z88dk-355b
}

replace restart {
	push	%1
	ld	%2,%3
	pop	%1
} by {
	ld	%2,%3
	; peephole z88dk-356
} if operandsNotRelated(%1 %2)

replace restart {
	ld	%3,#%1
	ld	a,%2 (%3)
} by {
	ld	a,(#%1 + %2)
	ld	%3,#%1
	; peephole z88dk-357a
} 

replace restart {
	ld	%3,#%1
	ld	%4,%2 (%3)
} by {
	ld	a,(#%1 + %2)
	ld	%4,a
	ld	%3,#%1
	; peephole z88dk-357b
} if notSame(%4 'a'), notUsed('a')

replace restart {
	ld	%1,%3 (%4)
	ld	%2,%1
} by {
	ld	%2,%3 (%4)
	; peephole z88dk-358
} if notUsed(%1), canAssign(%2 %3 %4)

replace restart {
	ex	de,hl
	ld	hl,#%1
	add	hl,de
} by {
	ld	de,#%1
	add	hl,de
	; peephole z88dk-359
} if notUsed('de')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	b,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	c,a
} by {
	ld	bc,#%1
	ld	hl,(#%2)
	add	hl,bc
	ld	a,h
	ld	b,l
	ld	c,h
	ld	hl,#%2 + 1
	; peephole z88dk-360
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, e
	ld	e,a
	inc	hl
	ld	a,(hl)
	sbc	a, d
	ld	d,a
} by {
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-361
}

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	%2 (%4),a
	ld	a,#>(%1)
	adc	a, h
	ld	%3 (%4),a
} by {
	ld	bc,#%1
	add	hl,bc
	ld	%2 (%4),l
	ld	%3 (%4),h
	ld	a,h
	; peephole z88dk-362a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a, l
	ld	%2 (%4),a
	ld	a,#>(%1)
	adc	a, h
	ld	%3 (%4),a
} by {
	ld	de,#%1
	add	hl,de
	ld	%2 (%4),l
	ld	%3 (%4),h
	ld	a,h
	; peephole z88dk-362b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	a,e
	add	a,#0xFF
	ld	%1 (%3),a
	ld	a,d
	adc	a,#0xFF
	ld	%2 (%3),a
} by {
	dec	de
	ld	%1 (%3),e
	ld	%2 (%3),d
	ld	a,d
	inc	de
	; peephole z88dk-363a
}

replace restart {
	ld	a,c
	add	a,#0xFF
	ld	%1 (%3),a
	ld	a,b
	adc	a,#0xFF
	ld	%2 (%3),a
} by {
	dec	bc
	ld	%1 (%3),c
	ld	%2 (%3),b
	ld	a,b
	inc	bc
	; peephole z88dk-363b
}

replace restart {
	ld	a,l
	add	a,#0xFF
	ld	%1 (%3),a
	ld	a,h
	adc	a,#0xFF
	ld	%2 (%3),a
} by {
	dec	hl
	ld	%1 (%3),l
	ld	%2 (%3),h
	ld	a,h
	inc	hl
	; peephole z88dk-363c
}

replace restart {
	ld	%1,%2 (%3)
	bit	%4, %2 (%3)
} by {
	ld	%1,%2 (%3)
	bit	%4,%1
	; peephole z88dk-364a
}
// if notVolatile

replace restart {
	ld	%1,%2 (%3)
	set	%4, %2 (%3)
} by {
	ld	%1,%2 (%3)
	set	%4,%1
	; peephole z88dk-364b
}
// if notVolatile

replace restart {
	ld	%1,%2 (%3)
	res	%4, %2 (%3)
} by {
	ld	%1,%2 (%3)
	res	%4,%1
	; peephole z88dk-364c
}
// if notVolatile

replace restart {
	ld	%3 (%4), %1
	ld	%2, %1
	ld	%3 (%4), %2
} by {
	ld	%3 (%4), %1
	ld	%2, %1
	; peephole z88dk-365
}
// if notVolatile

replace restart {
	ld	%1,#%2
} by {
	; peephole z88dk-366
} if notUsed(%1), notVolatile(%1)

replace restart {
	ld	a,(#%1)
	ld	l,a
} by {
	ld	hl,(#%1)
	; peephole z88dk-367
} if notUsed('h'), notUsed('a')

replace restart {
	ld	%1,#%2
	sla	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	sla	%4 (%1)
	; peephole z88dk-368a
}

replace restart {
	ld	%1,#%2
	sra	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	sra	%4 (%1)
	; peephole z88dk-368b
}

replace restart {
	ld	%1,#%2
	rl	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	rl	%4 (%1)
	; peephole z88dk-368c
}

replace restart {
	ld	%1,#%2
	rr	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	rr	%4 (%1)
	; peephole z88dk-368d
}

replace restart {
	ld	%1,#%2
	srl	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	srl	%4 (%1)
	; peephole z88dk-368e
}

replace restart {
	ld	%1,#%2
	rrc	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	rrc	%4 (%1)
	; peephole z88dk-368f
}

replace restart {
	ld	%1,#%2
	rlc	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	rlc	%4 (%1)
	; peephole z88dk-368g
}

replace restart {
	ld	%1,#%2
	inc	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	inc	%4 (%1)
	; peephole z88dk-368h
}

replace restart {
	ld	%1,#%2
	dec	%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	dec	%4 (%1)
	; peephole z88dk-368i
}

replace restart {
	ld	%1,#%2
	ld	%3,%4 (%1)
	ld	%1,#%2
} by {
	ld	%1,#%2
	ld	%3,%4 (%1)
	; peephole z88dk-368y
}

replace restart {
	ld	%1,#%2
	ld	%4 (%1),%3
	ld	%1,#%2
} by {
	ld	%1,#%2
	ld	%4 (%1),%3
	; peephole z88dk-368z
}

replace restart {
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
	inc	(hl)
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
	inc	(hl)
	; peephole z88dk-369a
}
// flags

replace restart {
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
	dec	(hl)
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
	dec	(hl)
	; peephole z88dk-369b
}
// flags

replace restart {
	ld	hl,#%1 + %2
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
} by {
	ld	bc,(#%1 + %2 - 1)
	ld	hl,#%1 + %2 - 1
	; peephole z88dk-370a
}

replace restart {
	ld	hl,#%1 + %2
	ld	d,(hl)
	dec	hl
	ld	e,(hl)
} by {
	ld	de,(#%1 + %2 - 1)
	ld	hl,#%1 + %2 - 1
	; peephole z88dk-370b
}

replace restart {
	ld	a,%1
	cp	a,a
} by {
	xor	a,a
	ld	a,%1
	; peephole z88dk-371
}

replace restart {
	ld	h,%1
	ld	l,%2
	ld	a,e
	sub	a, h
	ld	e,a
	ld	a,d
	sbc	a, l
	ld	d,a
} by {
	ld	l,%1
	ld	h,%2
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-372a
}

replace restart {
	ld	b,l
	ld	c,h
	ld	a,e
	sub	a, b
	ld	e,a
	ld	a,d
	sbc	a, c
	ld	d,a
} by {
	ld	b,l
	ld	c,h
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-372b
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a, b
	ld	b,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-373a
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	d,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	l,d
	ld	h,a
} by {
	ld	hl,(#%2)
	ld	de,#%1
	add	hl,de
	ld	d,l
	ld	a,h
	; peephole z88dk-373b
} if notUsed('e')

replace restart {
	ld	de,(#%1)
	ld	a,(de)
} by {
	ld	hl,(#%1)
	ld	a,(hl)
	; peephole z88dk-374a
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	bc,(#%1)
	ld	a,(bc)
} by {
	ld	hl,(#%1)
	ld	a,(hl)
	; peephole z88dk-374b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc,#%1
	ld	l,c
	ld	h,b
} by {
	ld	hl,#%1
	; peephole z88dk-375a
} if notUsed('bc')

replace restart {
	push	%13
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%7,%8 (%9)
	ld	%10,%11 (%12)
	pop	%13
} by {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%7,%8 (%9)
	ld	%10,%11 (%12)
	; peephole z88dk-376a
} if operandsNotRelated(%13 %1), operandsNotRelated(%13 %4), operandsNotRelated(%13 %7), operandsNotRelated(%13 %10)

replace restart {
	push	%13
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	pop	%13
} by {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	; peephole z88dk-376b
} if operandsNotRelated(%13 %1), operandsNotRelated(%13 %4)

replace restart {
	ld	%5,%6
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%7,%5
} by {
	ld	%5,%6
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%7,%6
	; peephole z88dk-376c
} if notVolatile(%5), canAssign(%6 '(hl)'), canAssign(%7 '(hl)')

replace restart {
	ld	hl,#%1 + 2
	sbc	a, (hl)
	ld	e,a
	ld	a,(#%2 + %3)
	ld	hl,#%1 + 3
} by {
	ld	hl,#%1 + 2
	sbc	a, (hl)
	ld	e,a
	ld	a,(#%2 + %3)
	inc	hl
	; peephole z88dk-377a
}

replace restart {
	ld	bc,(%1)
	ld	(%2),bc
} by {
	ld	hl,(%1)
	ld	(%2),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-378a
} if notUsed('hl')

replace restart {
	ld	de,(%1)
	ld	(%2),de
} by {
	ld	hl,(%1)
	ld	(%2),hl
	ld	e,l
	ld	d,h
	; peephole z88dk-378b
} if notUsed('hl')

replace restart {
	ld	de,#%1
	ld	hl,#%2
	ldi
	ld	a,(hl)
	ld	(de),a
} by {
	ld	hl,(#%2)
	ld	(#%1),hl
	dec	bc
	ld	a,h
	ld	de,#%1 + 1
	ld	hl,#%2 + 1
	; peephole z88dk-379a
}

replace restart {
	ld	de,#%1
	ld	hl,#%2
	ldi
	inc	bc
	ld	a,(hl)
	ld	(de),a
} by {
	ld	hl,(#%2)
	ld	(#%1),hl
	ld	a,h
	ld	de,#%1 + 1
	ld	hl,#%2 + 1
	; peephole z88dk-379b
}

replace restart {
	ld	bc,%1
	ld	hl,%2
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
} by {
	ld	de,%1
	ld	hl,%2
	ldi
	ld	a,(hl)
	ld	(de),a
	ld	c,e
	ld	b,d
	; peephole z88dk-379c
} if notUsed('de')

replace restart {
	ld	a,c
	ld	hl,%1
	add	a, (hl)
	ld	(%2),a
	ld	a,b
	ld	hl,%1 + 1
	adc	a, (hl)
	ld	(%2 + 1),a
	ld	a,e
	ld	hl,%1 + 2
	adc	a, (hl)
	ld	(%2 + 2),a
	ld	a,d
	ld	hl,%1 + 3
	adc	a, (hl)
	ld	(%2 + 3),a
} by {
	ld	hl,(%1)
	add	hl,bc
	ld	(%2),hl
	ld	hl,(%1 + 2)
	adc	hl,de
	ld	(%2 + 2),hl
	ld	a,h
	ld	hl,%1 + 3
	; peephole z88dk-380a
}

replace restart {
	inc	de
} by {
	; peephole z88dk-381b removed dead increment of de.
} if notUsed('de')

replace restart {
	inc	bc
} by {
	; peephole z88dk-381c removed dead increment of bc.
} if notUsed('bc')

//replace restart {
//	inc	ix
//} by {
//	; peephole z88dk-381d removed dead increment of ix.
//} if notUsed('ix')

//replace restart {
//	inc	iy
//} by {
//	; peephole z88dk-381e removed dead increment of iy.
//} if notUsed('iy')

replace restart {
	dec	de
} by {
	; peephole z88dk-382b removed dead decrement of de.
} if notUsed('de')

replace restart {
	dec	bc
} by {
	; peephole z88dk-382c removed dead decrement of bc.
} if notUsed('bc')

//replace restart {
//	dec	ix
//} by {
//	; peephole z88dk-382d removed dead decrement of ix.
//} if notUsed('ix')

//replace restart {
//	dec	iy
//} by {
//	; peephole z88dk-382e removed dead decrement of iy.
//} if notUsed('iy')

replace restart {
	ld	%2,%3
	ld	hl,%1
	ld	(hl),%2
} by {
	ld	hl,%1
	ld	(hl),%3
	; peephole z88dk-383a
} if canAssign('(hl)' %3), notUsed(%2), operandsNotRelated(%3 'hl'), operandsNotRelated(%2 'hl')

replace restart {
	ld	%2,%3
	ld	hl,#%1
	ld	(hl),%2
} by {
	ld	a,%3
	ld	(#%1),a
	ld	%2,a
	; peephole z88dk-383b
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	%1,%2
	dec	%1
	ld	a,%1
	ld	%2,%1
} by {
	dec	%2
	ld	%1,%2
	ld	a,%2
	; peephole z88dk-384
} if notSame(%2 '(hl)'), notSame(%2 '(de)'), notSame(%2 '(bc)')

replace restart {
	ld	hl,#%1
	ld	%2,(hl)
	ld	a,%2
} by {
	ld	a,(#%1)
	ld	%2,a
	; peephole z88dk-385
} if notUsed('hl')

replace restart {
	ld	%1,%2
	bit	%3,%1
} by {
	ld	%1,%2
	bit	%3,%2
	; peephole z88dk-386a
} if notVolatile(%1), canAssign(%2 '(hl)')

replace restart {
	ld	%1,%2
	ld	%4,%5
	bit	%3,%1
} by {
	bit	%3,%2
	ld	%1,%2
	ld	%4,%5
	; peephole z88dk-386b
} if same(%2 'a' 'b' 'c' 'd' 'e' 'h' 'l'), operandsNotRelated(%4 %1), notVolatile(%1)

replace restart {
	ld	%2,#0
	add	%2,sp
	push	%3
	ld	-2 (%2),#<(%1)
	ld	-1 (%2),#>(%1)
} by {
	ld	%2,#0
	add	%2,sp
	ld	bc,#%1
	push	bc
	; peephole z88dk-387a
} if notUsed('bc')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	%3
	ld	-2 (%2),#<(%1)
	ld	-1 (%2),#>(%1)
} by {
	ld	%2,#0
	add	%2,sp
	ld	hl,#%1
	push	hl
	; peephole z88dk-387b
} if notUsed('hl')

replace restart {
	call	___sdcc_enter_ix
	push	%3
	ld	-2 (ix),#<(%1)
	ld	-1 (ix),#>(%1)
} by {
	call	___sdcc_enter_ix
	ld	bc,#%1
	push	bc
	; peephole z88dk-387c
} if notUsed('bc')

replace restart {
	call	___sdcc_enter_ix
	push	%3
	ld	-2 (ix),#<(%1)
	ld	-1 (ix),#>(%1)
} by {
	call	___sdcc_enter_ix
	ld	hl,#%1
	push	hl
	; peephole z88dk-387d
} if notUsed('hl')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	af
	ld	a,%4 (%3)
	ld	-2 (%2),a
	ld	a,%5 (%3)
	ld	-1 (%2),a
} by {
	ld	%2,#0
	add	%2,sp
	ld	l,%4 (%3)
	ld	h,%5 (%3)
	ld	a,h
	push	hl
	; peephole z88dk-387e
} if notUsed('hl')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	af
	ld	a,%4 (%3)
	ld	-2 (%2),a
	ld	a,%5 (%3)
	ld	-1 (%2),a
} by {
	ld	%2,#0
	add	%2,sp
	ld	c,%4 (%3)
	ld	b,%5 (%3)
	ld	a,b
	push	bc
	; peephole z88dk-387f
} if notUsed('bc')

replace restart {
	call	___sdcc_enter_ix
	push	af
	ld	a,%4 (%3)
	ld	-2 (ix),a
	ld	a,%5 (%3)
	ld	-1 (ix),a
} by {
	call	___sdcc_enter_ix
	ld	l,%4 (%3)
	ld	h,%5 (%3)
	ld	a,h
	push	hl
	; peephole z88dk-387g
} if notUsed('hl')

replace restart {
	call	___sdcc_enter_ix
	push	af
	ld	a,%4 (%3)
	ld	-2 (ix),a
	ld	a,%5 (%3)
	ld	-1 (ix),a
} by {
	call	___sdcc_enter_ix
	ld	c,%4 (%3)
	ld	b,%5 (%3)
	ld	a,b
	push	bc
	; peephole z88dk-387h
} if notUsed('bc')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	af
	push	af
	ld	-4 (%2),#<(%1)
	ld	-3 (%2),#>(%1)
} by {
	ld	%2,#0
	add	%2,sp
	push	af
	ld	bc,#%1
	push	bc
	; peephole z88dk-387i
} if notUsed('bc')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	af
	push	af
	ld	-4 (%2),#<(%1)
	ld	-3 (%2),#>(%1)
} by {
	ld	%2,#0
	add	%2,sp
	push	af
	ld	hl,#%1
	push	hl
	; peephole z88dk-387j
} if notUsed('hl')

replace restart {
	call	___sdcc_enter_ix
	push	af
	push	af
	ld	-4 (ix),#<(%1)
	ld	-3 (ix),#>(%1)
} by {
	call	___sdcc_enter_ix
	push	af
	ld	bc,#%1
	push	bc
	; peephole z88dk-387k
} if notUsed('bc')

replace restart {
	call	___sdcc_enter_ix
	push	af
	push	af
	ld	-4 (ix),#<(%1)
	ld	-3 (ix),#>(%1)
} by {
	call	___sdcc_enter_ix
	push	af
	ld	hl,#%1
	push	hl
	; peephole z88dk-387l
} if notUsed('hl')

replace restart {
	ld	%2,#0
	add	%2,sp
	push	af
	dec	sp
	ld	-3 (%2),#%1
} by {
	ld	%2,#0
	add	%2,sp
	push	af
	ld	a,#%1
	push	af
	inc	sp
	; peephole z88dk-387m
} if notUsed('a')

replace restart {
	call	___sdcc_enter_ix
	push	af
	dec	sp
	ld	-3 (ix),#%1
} by {
	call	___sdcc_enter_ix
	push	af
	ld	a,#%1
	push	af
	inc	sp
	; peephole z88dk-387n
} if notUsed('a')

replace restart {
	call	___sdcc_enter_ix
	push	af
	push	af
	ld	-2 (ix),#0x%1
	ld	-1 (ix),#0x%2
	ld	hl,%5
	ex	(sp),hl
} by {
	call	___sdcc_enter_ix
	ld	hl,#0x%2%1
	push	hl
	ld	hl,%5
	push	hl
	; peephole z88dk-387o1
}

replace restart {
	call	___sdcc_enter_ix
	push	af
	push	af
	ld	-2 (ix),#0x%1
	ld	-1 (ix),#0x%2
} by {
	call	___sdcc_enter_ix
	ld	bc,#0x%2%1
	push	bc
	push	af
	; peephole z88dk-387o2
} if notUsed('bc')

replace restart {
	call	___sdcc_enter_ix
	push	af
	push	af
	ld	-2 (ix),#0x%1
	ld	-1 (ix),#0x%2
} by {
	call	___sdcc_enter_ix
	ld	hl,#0x%2%1
	push	hl
	push	af
	; peephole z88dk-387p
} if notUsed('hl')

replace restart {
	ld	%4,#0
	add	%4,sp
	push	af
	push	af
	ld	-2 (%4),#0x%1
	ld	-1 (%4),#0x%2
	ld	hl,%5
	ex	(sp),hl
} by {
	ld	%4,#0
	add	%4,sp
	ld	hl,#0x%2%1
	push	hl
	ld	hl,%5
	push	hl
	; peephole z88dk-387q1
}

replace restart {
	ld	%4,#0
	add	%4,sp
	push	af
	push	af
	ld	-2 (%4),#0x%1
	ld	-1 (%4),#0x%2
} by {
	ld	%4,#0
	add	%4,sp
	ld	bc,#0x%2%1
	push	bc
	push	af
	; peephole z88dk-387q2
} if notUsed('bc')

replace restart {
	ld	%4,#0
	add	%4,sp
	push	af
	push	af
	ld	-2 (%4),#0x%1
	ld	-1 (%4),#0x%2
} by {
	ld	%4,#0
	add	%4,sp
	ld	hl,#0x%2%1
	push	hl
	push	af
	; peephole z88dk-387r
} if notUsed('hl')

replace restart {
	ld	l, c
	ld	h, b
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	l, c
	ld	h, b
} by {
	ld	l,c
	ld	h,b
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	dec	hl
	; peephole z88dk-388
}

replace restart {
	push	bc
	pop	de
} by {
	ld	e,c
	ld	d,b
	; peephole z88dk-389a
}

replace restart {
	push	de
	pop	bc
} by {
	ld	c,e
	ld	b,d
	; peephole z88dk-389b
}

replace restart {
	push	bc
	pop	hl
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-389c
}

replace restart {
	push	hl
	pop	bc
} by {
	ld	c,l
	ld	b,h
	; peephole z88dk-389d
}

replace restart {
	push	hl
	pop	de
} by {
	ld	e,l
	ld	d,h
	; peephole z88dk-389e
}

replace restart {
	push	de
	pop	hl
} by {
	ld	l,e
	ld	h,d
	; peephole z88dk-389f
}

replace restart {
	ld	a,%1
	ld	(%2),a
	inc	%3
	ld	a,%1
} by {
	ld	a,%1
	ld	(%2),a
	inc	%3
	; peephole z88dk-390
} if operandsNotRelated(%1 %3), operandsNotRelated(%3 'a')

replace restart {
	ld	b,a
	push	bc
	inc	sp
} by {
	push	af
	inc	sp
	ld	b,a
	; peephole z88dk-391a
}

replace restart {
	ld	d,a
	push	de
	inc	sp
} by {
	push	af
	inc	sp
	ld	d,a
	; peephole z88dk-391b
}

replace restart {
	ld	h,a
	push	hl
	inc	sp
} by {
	push	af
	inc	sp
	ld	h,a
	; peephole z88dk-391c
}

replace restart {
	ld	e,%1
	push	de
	inc	sp
} by {
	push	de
	inc	sp
	ld	e,%1
	; peephole z88dk-392a
}

replace restart {
	ld	c,%1
	push	bc
	inc	sp
} by {
	push	bc
	inc	sp
	ld	c,%1
	; peephole z88dk-392b
}

replace restart {
	ld	l,%1
	push	hl
	inc	sp
} by {
	push	hl
	inc	sp
	ld	l,%1
	; peephole z88dk-392c
}

replace restart {
	ld	a,c
	add	a,#0x%1
	ld	e,a
	ld	a,b
	adc	a,#0x%2
	ld	d,a
} by {
	ld	hl,#0x%2%1
	add	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-393a
} if notUsed('hl')

replace restart {
	ld	a,c
	add	a,#0x%1
	ld	e,a
	ld	a,b
	adc	a,#0x%2
	ld	d,a
} by {
	ex	de,hl
	ld	hl,#0x%2%1
	add	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-393b
}

replace restart {
	ld	a,l
	adc	a,#0x%1
	ld	e,a
	ld	a,h
	adc	a,#0x%2
	ld	d,a
} by {
	ld	de,#0x%2%1
	adc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-393c
} if notUsed('hl')

replace restart {
	ld	a,c
	add	a,#0x%1
	ld	c,a
	ld	a,b
	adc	a,#0x%2
	ld	b,a
} by {
	ld	hl,#0x%2%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393d
} if notUsed('hl')

replace restart {
	ld	hl,%1
	ld	a,c
	add	a,#0x%2
	ld	c,a
	ld	a,b
	adc	a,#0x%3
	ld	b,a
} by {
	ld	hl,#0x%3%2
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,%1
	; peephole z88dk-393e
}

replace restart {
	ld	hl,(%1)
	ld	a,c
	add	a,#0x%2
	ld	c,a
	ld	a,b
	adc	a,#0x%3
	ld	b,a
} by {
	ld	hl,#0x%3%2
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,(%1)
	; peephole z88dk-393f
}

replace restart {
	ld	hl,(%1 + %4)
	ld	a,c
	add	a,#0x%2
	ld	c,a
	ld	a,b
	adc	a,#0x%3
	ld	b,a
} by {
	ld	hl,#0x%3%2
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,(%1 + %4)
	; peephole z88dk-393g
}

replace restart {
	ld	hl,(%1 + %4 + %5)
	ld	a,c
	add	a,#0x%2
	ld	c,a
	ld	a,b
	adc	a,#0x%3
	ld	b,a
} by {
	ld	hl,#0x%3%2
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,(%1 + %4 + %5)
	; peephole z88dk-393h
}

replace restart {
	ld	a,l
	add	a,%1 (%2)
	ld	c,a
	ld	a,h
	adc	a,%3 (%4)
	ld	b,a
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-393i
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,#<(%1)
	add	a, c
	ld	e,a
	ld	a,#>(%1)
	adc	a, b
	ld	d,a
} by {
	ld	hl,#%1
	add	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-393j1
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a, c
	ld	e,a
	ld	a,#>(%1)
	adc	a, b
	ld	d,a
} by {
	ex	de,hl
	ld	hl,#%1
	add	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-393j2
}

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a, c
	dec	hl
	ld	(hl),a
	ld	a,d
	adc	a, b
	inc	hl
	ld	(hl),a
} by {
	ld	l,e
	ld	h,d
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1
	; peephole z88dk-393k1
}

replace restart {
	ld	a,e
	ld	hl,#%1 + %2
	add	a, c
	dec	hl
	ld	(hl),a
	ld	a,d
	adc	a, b
	inc	hl
	ld	(hl),a
} by {
	ld	l,e
	ld	h,d
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + %2
	; peephole z88dk-393k2
}

replace restart {
	ld	a,%2 (%3)
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,%4 (%5)
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-393l1
}

replace restart {
	ld	a,%2 (%3)
	ld	hl,#%1 + %9
	add	a, (hl)
	ld	c,a
	ld	a,%4 (%5)
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	ld	hl,(#%1 + %9)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %9 + 1
	; peephole z88dk-393l2
}

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a, (hl)
	ld	(#%2),a
	ld	a,d
	ld	hl,#%1 + 1
	adc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	(#%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393m
}

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,b
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-393n1
}

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,b
	inc	hl
	adc	a, (hl)
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	hl,#%1 + 1
	; peephole z88dk-393n2
}

replace restart {
	ld	a,(%1)
	add	a, #0x%3
	ld	(%2),a
	ld	a,(%1 + 1)
	adc	a, #0x%4
	ld	(%2 + 1),a
} by {
	ld	hl,(%1)
	ld	bc,#0x%4%3
	add	hl,bc
	ld	a,h
	ld	(%2),hl
	; peephole z88dk-393p1
} if notUsed('hl'), notUsed('bc')

replace restart {
	ld	a,(%1)
	add	a, #0x%3
	ld	(%2),a
	ld	a,(%1 + 1)
	adc	a, #0x%4
	ld	(%2 + 1),a
} by {
	ld	hl,(%1)
	ld	de,#0x%4%3
	add	hl,de
	ld	a,h
	ld	(%2),hl
	; peephole z88dk-393p2
} if notUsed('hl'), notUsed('de')

replace restart {
	ld	a,(%1)
	add	a, #0x%3
	ld	(%2),a
	ld	a,(%1 + 1)
	adc	a, #0x%4
	ld	(%2 + 1),a
} by {
	ld	hl,(%1)
	ld	a,l
	add	a,#0x%3
	ld	l,a
	ld	a,h
	adc	a,#0x%4
	ld	h,a
	ld	(%2),hl
	; peephole z88dk-393p3
} if notUsed('hl')

replace restart {
	ld	a,c
	sub	a, e
	ld	hl,#%1
	ld	(hl),a
	ld	a,b
	sbc	a, d
	inc	hl
	ld	(hl),a
} by {
	ld	l,c
	ld	h,b
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%1),hl
	; peephole z88dk-393q1
} if notUsed('hl')

replace restart {
	ld	a,e
	sub	a, c
	ld	hl,#%1
	ld	(hl),a
	ld	a,d
	sbc	a, b
	inc	hl
	ld	(hl),a
} by {
	ld	l,e
	ld	h,d
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%1),hl
	; peephole z88dk-393q2
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	c,a
	ld	a,#>(%1)
	inc	hl
	adc	a, (hl)
	ld	b,a
} by {
	ld	hl,(#%2)
	ld	bc,#%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%2 + 1
	; peephole z88dk-393r1
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, #0x%2
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a, #0x%3
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	bc,#0x%3%2
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-393r2
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	sbc	a, d
	ld	(hl),a
} by {
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,de
	ld	(#%1),hl
	; peephole z88dk-393s
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, c
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, b
	ld	(hl),a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	(#%1),hl
	; peephole z88dk-393t
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,b
	ld	hl,#%1 + 1
} by {
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,b
	inc	hl
	; peephole z88dk-393u
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,l
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,b
	inc	hl
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	bc,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-393v1
} if notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,l
	ld	hl,#%1
	sub	a, (hl)
	ld	(#%2),a
	ld	a,b
	inc	hl
	sbc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%2),hl
	ld	hl,#%1 + 1
	; peephole z88dk-393v2
} if notUsed('de')

replace restart {
	ld	e,c
	ld	d,b
	ld	hl,%1
	ld	a,e
	sub	a,l
	ld	e,a
	ld	a,d
	sbc	a,h
	ld	d,a
} by {
	ld	l,c
	ld	h,b
	ld	de,%1
	xor	a,a
	sbc	hl,de
	ex	de,hl
	; peephole z88dk-393w
} if notUsed('a')

replace restart {
	ld	a,#<(%1)
	add	a,c
	ld	c,a
	ld	a,#>(%1)
	adc	a,#0x%2
	ld	b,a
} by {
	ld	hl,#%1
	ld	b,#0x%2
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-393x
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	c,l
	ld	b,h
	srl	b
	rr	c
} by {
	srl	h
	rr	l
	ld	c,l
	ld	b,h
	; peephole z88dk-393y
} if notUsed('hl')

replace restart {
	ld	a,e
	ld	hl,#%3
	adc	a,#0x%1
	inc	hl
	ld	(hl),a
	ld	a,d
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x%2%1
	adc	hl,de
	ld	a,h
	ld	(#%3 + 1),hl
	ld	hl,#%3 + 2
	; peephole z88dk-393z1
}

replace restart {
	ld	a,e
	ld	hl,#%3 + %4
	adc	a,#0x%1
	inc	hl
	ld	(hl),a
	ld	a,d
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x%2%1
	adc	hl,de
	ld	a,h
	ld	(#%3 + %4 + 1),hl
	ld	hl,#%3 + %4 + 2
	; peephole z88dk-393z2
}

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%3
	add	a,#0x%1
	ld	(hl),a
	ld	a,b
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	bc,#0x%2%1
	add	hl,bc
	ld	a,h
	ld	(#%3),hl
	ld	hl,#%3 + 1
	; peephole z88dk-393aa1
} if notUsed('bc')

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%3
	add	a,#0x%1
	ld	(hl),a
	ld	a,b
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	b,h
	ld	de,#0x%2%1
	add	hl,de
	ld	a,h
	ld	(#%3),hl
	ld	hl,#%3 + 1
	; peephole z88dk-393aa2
} if notUsed('de')

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%3 + %4
	add	a,#0x%1
	ld	(hl),a
	ld	a,b
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	bc,#0x%2%1
	add	hl,bc
	ld	a,h
	ld	(#%3 + %4),hl
	ld	hl,#%3 + %4 + 1
	; peephole z88dk-393aa3
} if notUsed('bc')

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%3 + %4
	add	a,#0x%1
	ld	(hl),a
	ld	a,b
	adc	a,#0x%2
	inc	hl
	ld	(hl),a
} by {
	ld	b,h
	ld	de,#0x%2%1
	add	hl,de
	ld	a,h
	ld	(#%3 + %4),hl
	ld	hl,#%3 + %4 + 1
	; peephole z88dk-393aa4
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,e
	add	a,c
	ld	c,a
	ld	a,d
	adc	a,b
	ld	b,a
} by {
	add	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393ab
} if notUsed('hl')

replace restart {
	ld	a,e
	sub	a,c
	ld	c,a
	ld	a,d
	sbc	a,b
	ld	b,a
	push	bc
} by {
	ex	de,hl
	xor	a,a
	sbc	hl,bc
	push	hl
	; peephole z88dk-393ac
} if notUsed('hl'), notUsed('de'), notUsed('bc'), notUsed('a')

replace restart {
	ld	a,#0x%1
	sub	a,c
	ld	c,a
	ld	a,#0x%2
	sbc	a,b
	ld	b,a
	ld	a,e
	sub	a,c
	ld	a,d
	sbc	a,b
} by {
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,bc
	ld	a,e
	sub	a,l
	ld	a,d
	sbc	a,h
	; peephole z88dk-393ad
} if notUsed('hl'), notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	xor	a,a
	sbc	hl,bc
} by {
	ex	de,hl
	ld	hl,%1
	xor	a,a
	sbc	hl,de
	; peephole z88dk-393ae
} if notUsed('bc'), notUsed('de')

replace restart {
	ld	a,#<(%1)
	add	a,l
	ld	%2 (%3),a
	ld	a,#>(%1)
	adc	a,h
	ld	l,%2 (%3)
	ld	%4 (%5),a
	ld	h,a
} by {
	ld	bc,#%1
	add	hl,bc
	ld	%2 (%3),l
	ld	%4 (%5),h
	ld	a,h
	; peephole z88dk-393af1
} if notUsed('bc')

replace restart {
	ld	a,#<(%1)
	add	a,l
	ld	%2 (%3),a
	ld	a,#>(%1)
	adc	a,h
	ld	l,%2 (%3)
	ld	%4 (%5),a
	ld	h,a
} by {
	ld	de,#%1
	add	hl,de
	ld	%2 (%3),l
	ld	%4 (%5),h
	ld	a,h
	; peephole z88dk-393af2
} if notUsed('de')

replace restart {
	ld	a,c
	add	a,%1
	ld	c,a
	ld	a,b
	adc	a,%2
	ld	b,a
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	a,c
	add	a,%1
	ld	(hl),a
	ld	c,a
	ld	a,b
	adc	a,%2
	inc	hl
	ld	(hl),a
	ld	b,a
	; peephole z88dk-393ag
} if notSame(%2 '(hl)')

replace restart {
	ld	%1 (%2),a
	ld	a,%3
	adc	a,%4
	ld	%5,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%5,a
	ld	a,%3
	adc	a,%4
	; peephole z88dk-393ah
} if notSame(%5 'a'), notSame(%5 %3), notSame(%5 %4)

replace restart {
	ld	a, (hl)
	inc	hl
	ld	h,(hl)
	add	a,#<(%1)
	ld	l,a
	ld	a,#>(%1)
	adc	a, h
	ld	h,a
} by {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	ld	hl,#%1
	add	hl,bc
	ld	a,h
	; peephole z88dk-393ai1
} if notUsed('bc')

replace restart {
	ld	a, (hl)
	inc	hl
	ld	h,(hl)
	add	a,#<(%1)
	ld	l,a
	ld	a,#>(%1)
	adc	a, h
	ld	h,a
} by {
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	hl,#%1
	add	hl,de
	ld	a,h
	; peephole z88dk-393ai2
} if notUsed('de')

replace restart {
	ld	a,#<(%1)
	add	a,%2 (%3)
	ld	l,a
	ld	a,#>(%1)
	adc	a,%4 (%5)
	ld	h,a
} by {
	ld	bc,#%1
	ld	l,%2 (%3)
	ld	h,%4 (%5)
	add	hl,bc
	ld	a,h
	; peephole z88dk-393aj1
} if notUsed('bc')

replace restart {
	ld	a,#<(%1)
	add	a,%2 (%3)
	ld	l,a
	ld	a,#>(%1)
	adc	a,%4 (%5)
	ld	h,a
} by {
	ld	de,#%1
	ld	l,%2 (%3)
	ld	h,%4 (%5)
	add	hl,de
	ld	a,h
	; peephole z88dk-393aj2
} if notUsed('de')

replace restart {
	ld	a,#<(%1)
	add	a,%2 (%3)
	ld	%4 (%5),a
	ld	l,a
	ld	a,#>(%1)
	adc	a,#%6
	ld	%7 (%8),a
	ld	h,a
} by {
	ld	bc,#%1
	ld	l,%2 (%3)
	ld	h,#%6
	add	hl,bc
	ld	%4 (%5),l
	ld	%7 (%8),h
	ld	a,h
	; peephole z88dk-393k1
} if notUsed('bc')

replace restart {
	ld	a,#<(%1)
	add	a,%2 (%3)
	ld	%4 (%5),a
	ld	l,a
	ld	a,#>(%1)
	adc	a,#%6
	ld	%7 (%8),a
	ld	h,a
} by {
	ld	de,#%1
	ld	l,%2 (%3)
	ld	h,#%6
	add	hl,de
	ld	%4 (%5),l
	ld	%7 (%8),h
	ld	a,h
	; peephole z88dk-393k2
} if notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	e,%2 (%3)
	ld	d,%4 (%5)
	add	hl,de
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-393l1
} if notUsed('a'), notUsed('de')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	add	hl,bc
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-393l2
} if notUsed('a'), notUsed('bc')

replace restart {
	ld	hl,#%1 + %6
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1 + %6)
	ld	e,%2 (%3)
	ld	d,%4 (%5)
	add	hl,de
	ld	(#%1 + %6),hl
	ld	hl,#%1 + %6 + 1
	; peephole z88dk-393l3
} if notUsed('a'), notUsed('de')

replace restart {
	ld	hl,#%1 + %6
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1 + %6)
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	add	hl,bc
	ld	(#%1 + %6),hl
	ld	hl,#%1 + %6 + 1
	; peephole z88dk-393l4
} if notUsed('a'), notUsed('bc')

replace restart {
	ld	a,e
	add	a,#0x%1
	ld	%3 (%4),a
	ld	a,d
	adc	a,#0x%2
	ld	%5 (%6),a
} by {
	ld	hl,#0x%2%1
	add	hl,de
	ld	%3 (%4),l
	ld	%5 (%6),h
	; peephole z88dk-393m
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,e
	ld	hl,#%1
	sub	a,(hl)
	ld	%3 (%4),a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%1)
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	%3 (%4),l
	ld	%5 (%6),h
	ld	hl,#%1 + 1
	; peephole z88dk-393n1
} if notUsed('de'), notUsed('a')

replace restart {
	ld	a,e
	ld	hl,#%1
	sbc	a,(hl)
	ld	%3 (%4),a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%1)
	ex	de,hl
	sbc	hl,de
	ld	%3 (%4),l
	ld	%5 (%6),h
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393n2
} if notUsed('de')

replace restart {
	ld	a,e
	ld	hl,#%1 + %2
	sub	a,(hl)
	ld	%3 (%4),a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%1 + %2)
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	%3 (%4),l
	ld	%5 (%6),h
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-393n3
} if notUsed('de'), notUsed('a')

replace restart {
	ld	a,e
	ld	hl,#%1 + %2
	sbc	a,(hl)
	ld	%3 (%4),a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%1 + %2)
	ex	de,hl
	sbc	hl,de
	ld	%3 (%4),l
	ld	%5 (%6),h
	ld	a,h
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-393n4
} if notUsed('de')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%3
	ld	c,a
	ld	a,%5 (%6)
	adc	a,#0x%4
	ld	b,a
	ld	l,c
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%5 (%6)
	ld	bc,#0x%4%3
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393o
}

replace restart {
	ld	a,%1 (%2)
	add	a,l
	ld	c,a
	ld	a,%3 (%4)
	adc	a,h
	ld	b,a
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393p1
} if notUsed('hl')

replace restart {
	ld	b,h
	ld	a,l
	add	a,%1 (%2)
	ld	c,a
	ld	a,b
	adc	a,%3 (%4)
	ld	b,a
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393p2
} if notUsed('hl')

replace restart {
	ld	a,%1 (%2)
	add	a,c
	ld	e,a
	ld	a,%3 (%4)
	adc	a,b
	ld	d,a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	add	hl,bc
	ld	a,h
	ex	de,hl
	; peephole z88dk-393q
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a,%4 (%5)
	ld	%2 (%3),a
	ld	a,#>(%1)
	adc	a,%6 (%7)
	ld	l,%2 (%3)
	ld	%8 (%9),a
	ld	h,a
} by {
	ld	l,%4 (%5)
	ld	h,%6 (%7)
	ld	bc,#%1
	add	hl,bc
	ld	%2 (%3),l
	ld	%8 (%9),h
	ld	a,h
	; peephole z88dk-393r1
} if notUsed('bc')

replace restart {
	ld	a,#<(%1)
	add	a,%4 (%5)
	ld	%2 (%3),a
	ld	a,#>(%1)
	adc	a,%6 (%7)
	ld	l,%2 (%3)
	ld	%8 (%9),a
	ld	h,a
} by {
	ld	l,%4 (%5)
	ld	h,%6 (%7)
	ld	de,#%1
	add	hl,de
	ld	%2 (%3),l
	ld	%8 (%9),h
	ld	a,h
	; peephole z88dk-393r2
} if notUsed('de')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,%1 (%2)
	add	a,c
	ld	c,a
	ld	a,%3 (%4)
	adc	a,b
	ld	b,a
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393s1
} if notUsed('hl')

replace restart {
	ld	a,%1 (%2)
	add	a,c
	ld	c,a
	ld	a,%3 (%4)
	adc	a,b
	ld	l,c
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	add	hl,bc
	ld	a,h
	ld	c,l
	; peephole z88dk-393s2
}

replace restart {
	ld	c,l
	ld	b,h
	ld	l,%3 (%4)
	ld	h,%5 (%6)
	add	hl,bc
} by {
	ld	c,%3 (%4)
	ld	b,%5 (%6)
	add	hl,bc
	; peephole z88dk-393s3
} if notUsed('bc')

replace restart {
	ex	de,hl
	ld	l,%3 (%4)
	ld	h,%5 (%6)
	add	hl,de
} by {
	ld	e,%3 (%4)
	ld	d,%5 (%6)
	add	hl,de
	; peephole z88dk-393s4
} if notUsed('de')

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%1
	sub	a,(hl)
	ld	(%2),a
	ld	a,b
	inc	hl
	sbc	a, (hl)
	ld	(%2 + 1),a
} by {
	ld	bc,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	(%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393t1
} if notUsed('bc')

replace restart {
	ld	b,h
	ld	a,l
	ld	hl,#%1
	sub	a,(hl)
	ld	(%2),a
	ld	a,b
	inc	hl
	sbc	a, (hl)
	ld	(%2 + 1),a
} by {
	ld	b,h
	ld	de,(#%1)
	xor	a,a
	sbc	hl,de
	ld	(%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393t2
} if notUsed('de')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%9
	ld	%5 (%6),a
	ld	l,a
	ld	a,%3 (%4)
	adc	a,#0x%10
	ld	%7 (%8),a
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	de,#0x%10%9
	add	hl,de
	ld	%5 (%6),l
	ld	%7 (%8),h
	ld	a,h
	; peephole z88dk-393u1
} if notUsed('de')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%9
	ld	%5 (%6),a
	ld	l,a
	ld	a,%3 (%4)
	adc	a,#0x%10
	ld	%7 (%8),a
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	bc,#0x%10%9
	add	hl,bc
	ld	%5 (%6),l
	ld	%7 (%8),h
	ld	a,h
	; peephole z88dk-393u2
} if notUsed('bc')

replace restart {
	ex	de,hl
	ld	a,%1 (%2)
	add	a, e
	ld	%5 (%6),a
	ld	a,%3 (%4)
	adc	a, d
	ld	%7 (%8),a
} by {
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	add	hl,de
	ld	%5 (%6),l
	ld	%7 (%8),h
	ld	a,h
	; peephole z88dk-393v1
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, d
	ld	(hl),a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393w1
}

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	add	a, e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a, d
	ld	(hl),a
} by {
	ld	hl,(#%1 + %2)
	add	hl,de
	ld	(#%1 + %2),hl
	ld	a,h
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-393w2
}

replace restart {
	ld	hl,#%8
	add	a,(hl)
	ld	%1 (%2),a
	ld	a,%3 (%4)
	inc	hl
	adc	a,(hl)
	ld	%5 (%6),a
} by {
	ld	hl,(#%8)
	add	a,l
	ld	%1 (%2),a
	ld	a,%3 (%4)
	adc	a,h
	ld	%5 (%6),a
	; peephole z88dk-393x1
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	add	hl,bc
	ld	(#%1),hl
	; peephole z88dk-393y1
} if notUsed('bc'), notUsed('hl'), notUsed('a')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
	inc	hl
} by {
	ld	hl,(#%1)
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 2
	; peephole z88dk-393y2
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	e,%2 (%3)
	ld	d,%4 (%5)
	add	hl,de
	ld	(#%1),hl
	; peephole z88dk-393y3
} if notUsed('de'), notUsed('hl'), notUsed('a')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	(hl),a
	inc	hl
} by {
	ld	hl,(#%1)
	ld	e,%2 (%3)
	ld	d,%4 (%5)
	add	hl,de
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 2
	; peephole z88dk-393y4
} if notUsed('de')

replace restart {
	ld	hl,#%2
	ld	a,(hl)
	add	a,c
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#%1
	ld	(hl),a
	ld	d,a
	dec	hl
	ld	e,(hl)
} by {
	ld	hl,(#%2)
	ld	b,#%1
	add	hl,bc
	ld	a,h
	ld	(#%2),hl
	ex	de,hl
	ld	hl,#%2
	; peephole z88dk-393z1
} if notUsed('b')

replace restart {
	ld	hl,#%2 + %3
	ld	a,(hl)
	add	a,c
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#%1
	ld	(hl),a
	ld	d,a
	dec	hl
	ld	e,(hl)
} by {
	ld	hl,(#%2 + %3)
	ld	b,#%1
	add	hl,bc
	ld	a,h
	ld	(#%2 + %3),hl
	ex	de,hl
	ld	hl,#%2 + %3
	; peephole z88dk-393z2
} if notUsed('b')

replace restart {
	ld	%3,h
	ld	a,l
	ld	hl,#%1
	add	a, (hl)
	ld	(#%2),a
	ld	a,%3
	ld	hl,#%1 + 1
	adc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ex	de,hl
	ld	hl,(#%1)
	add	hl,de
	ld	(#%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	ld	%3,d
	; peephole z88dk-393aa1
} if notUsed('de'), notVolatile(%3)

replace restart {
	ld	%3,h
	ld	a,l
	ld	hl,#%1
	add	a, (hl)
	ld	(#%2),a
	ld	a,%3
	ld	hl,#%1 + 1
	adc	a, (hl)
	ld	(#%2 + 1),a
} by {
	ld	%3,h
	ld	bc,(#%1)
	add	hl,bc
	ld	(#%2),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393aa2
} if notUsed('bc'), operandsNotRelated(%3 'bc'), notVolatile(%3)

replace restart {
	ld	b,h
	ld	a,l
	add	a,#0x%1
	ld	c,a
	ld	a,b
	adc	a,#0x%2
	ld	b,a
} by {
	ld	bc,#0x%2%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-393ab
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a, c
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a, b
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ex	de,hl
	ld	a,d
	ld	hl,#%1 + 1
	; peephole z88dk-393ac
}

replace restart {
	ld	a,c
	ld	hl,#%1 + 1
	add	a, e
	dec	hl
	ld	(hl),a
	ld	a,b
	adc	a, d
	inc	hl
	ld	(hl),a
} by {
	ld	l,e
	ld	h,d
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-393ad
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,%4 (%5)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	c,%2 (%3)
	ld	b,%4 (%5)
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-393ae
}

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%5
	ld	hl,#%7
	ld	(hl),a
	ld	a,%3 (%4)
	adc	a,#0x%6
	inc	hl
	ld	(hl),a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	de,#0x%6%5
	add	hl,de
	ld	a,h
	ld	(#%7),hl
	ld	hl,#%7 + 1
	; peephole z88dk-393af1
} if notUsed('de')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%5
	ld	hl,#%7
	ld	(hl),a
	ld	a,%3 (%4)
	adc	a,#0x%6
	inc	hl
	ld	(hl),a
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	bc,#0x%6%5
	add	hl,bc
	ld	a,h
	ld	(#%7),hl
	ld	hl,#%7 + 1
	; peephole z88dk-393af2
} if notUsed('bc')

replace restart {
	ld	a,#0x%1
	ld	hl,#%3
	sub	a, (hl)
	ld	(#%4),a
	ld	a,#0x%2
	ld	hl,#%3 + 1
	sbc	a, (hl)
	ld	(#%4 + 1),a
} by {
	ld	hl,#0x%2%1
	ld	de,(#%3)
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	(#%4),hl
	ld	hl,#%3 + 1
	; peephole z88dk-393ag1
} if notUsed('de')

replace restart {
	ld	a,#0x%1
	ld	hl,#%3
	sub	a, (hl)
	ld	(#%4),a
	ld	a,#0x%2
	ld	hl,#%3 + 1
	sbc	a, (hl)
	ld	(#%4 + 1),a
} by {
	ld	hl,#0x%2%1
	ld	bc,(#%3)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	(#%4),hl
	ld	hl,#%3 + 1
	; peephole z88dk-393ag2
} if notUsed('bc')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%3
	ld	l,a
	ld	a,%4 (%5)
	adc	a,#0x%6
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%4 (%5)
	ld	de,#0x%6%3
	add	hl,de
	; peephole z88dk-393ah1
} if notUsed('de'), notUsed('a')

replace restart {
	ld	a,%1 (%2)
	add	a,#0x%3
	ld	l,a
	ld	a,%4 (%5)
	adc	a,#0x%6
	ld	h,a
} by {
	ld	l,%1 (%2)
	ld	h,%4 (%5)
	ld	bc,#0x%6%3
	add	hl,bc
	; peephole z88dk-393ah2
} if notUsed('bc'), notUsed('a')











replace restart {
	inc	sp
	inc	sp
} by {
	pop	bc
	; peephole z88dk-394a
} if notUsed('bc')

replace restart {
	inc	sp
	inc	sp
} by {
	pop	de
	; peephole z88dk-394b
} if notUsed('de')

replace restart {
	inc	sp
	inc	sp
} by {
	pop	hl
	; peephole z88dk-394c
} if notUsed('hl')

//replace restart {
//	inc	sp
//	inc	sp
//} by {
//	pop	af
//	; peephole z88dk-394d  INCORRECT IF FLAGS TESTED
//} if notUsed('a')

replace restart {
	ld	hl,#%1
	ld	c, l
	ld	b, h
} by {
	ld	bc,#%1
	; peephole z88dk-395a
} if notUsed('hl')

replace restart {
	ld	bc,#%1
	ld	e,c
	ld	d,b
} by {
	ld	de,#%1
	; peephole z88dk-395b
} if notUsed('bc')

replace restart {
	ld	e,c
	ld	d,b
	ld	%1,de
} by {
	ld	%1,bc
	ld	e,c
	ld	d,b
	; peephole z88dk-395c
}

replace restart {
	ld	%1,(hl)
	bit	%2,%1
} by {
	bit	%2,(hl)
	; peephole z88dk-396a
} if notUsed(%1)

replace restart {
	ld	%1,(hl)
	res	%2,%1
	ld	(hl),%1
} by {
	res	%2,(hl)
	; peephole z88dk-396b
} if notUsed(%1)

replace restart {
	ld	%1,(hl)
	set	%2,%1
	ld	(hl),%1
} by {
	set	%2,(hl)
	; peephole z88dk-396c
} if notUsed(%1)

replace restart {
	ld	l, c
	ld	h, b
	push	bc
	ld	bc, %1
	add	hl, bc
	pop	bc
} by {
	ld	hl,%1
	add	hl,bc
	; peephole z88dk-397a
}

replace restart {
	push	%4
	ld	%1,%2
	dec	%3
	pop	%4
} by {
	ld	%1,%2
	dec	%3
	; peephole z88dk-397b
} if operandsNotRelated(%1 %4), operandsNotRelated(%3 %4)

replace restart {
	push	%4
	ld	%1,%2
	inc	%3
	pop	%4
} by {
	ld	%1,%2
	inc	%3
	; peephole z88dk-397c
} if operandsNotRelated(%1 %4), operandsNotRelated(%3 %4)

replace restart {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	dec	%9
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
} by {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	dec	%9
	; peephole z88dk-397d
} if operandsNotRelated(%1 %7), operandsNotRelated(%1 %9), operandsNotRelated(%2 %7), operandsNotRelated(%2 %9)
// notVolatile

replace restart {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	inc	%9
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
} by {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	inc	%9
	; peephole z88dk-397d
} if operandsNotRelated(%1 %7), operandsNotRelated(%1 %9), operandsNotRelated(%2 %7), operandsNotRelated(%2 %9)
// notVolatile

replace restart {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	set	%9,%10
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
} by {
	ld	%1,%3 (%5)
	ld	%2,%4 (%6)
	ld	%7,%8
	set	%9,%10
	; peephole z88dk-397e
} if operandsNotRelated(%1 %7), operandsNotRelated(%1 %10), operandsNotRelated(%2 %7), operandsNotRelated(%2 %10)
// not Volatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,%8
	ld	%3,%1 (%2)
	ld	%6,%4 (%5)
} by {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,%8
	; peephole z88dk-397f
} if operandsNotRelated(%7 %3), operandsNotRelated(%7 %6)
// notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,(%8)
	ld	%3,%1 (%2)
	ld	%6,%4 (%5)
} by {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,(%8)
	; peephole z88dk-397g
} if operandsNotRelated(%7 %3), operandsNotRelated(%7 %6)
// notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,(%8 + %9)
	ld	%3,%1 (%2)
	ld	%6,%4 (%5)
} by {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7,(%8 + %9)
	; peephole z88dk-397h
} if operandsNotRelated(%7 %3), operandsNotRelated(%7 %6)
// notVolatile

replace restart {
	ld	%1,%2 (%3)
	ld	%5,%6 (%7)
	ld	%9,%10
	ld	%4,%2 (%3)
	ld	%8,%6 (%7)
} by {
	ld	%1,%2 (%3)
	ld	%5,%6 (%7)
	ld	%9,%10
	ld	%4,%1
	ld	%8,%5
	; peephole z88dk-397i
} if operandsNotRelated(%9 %1), operandsNotRelated(%9 %5), canAssign(%4 %1), canAssign(%8 %5)
//notVolatile 

replace restart {
	ld	%2 (%3),%1
	ld	%4,%5
	ld	%6,%7 (%8)
	ld	%1,%2 (%3)
} by {
	ld	%2 (%3),%1
	ld	%4,%5
	ld	%6,%7 (%8)
	; peephole z88dk-397j1
} if operandsNotRelated(%1 %4), operandsNotRelated(%1 %6)
// notVolatile

replace restart {
	ld	b,l
	ld	c,h
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	l,b
	ld	h,c
} by {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	b,l
	ld	c,h
	; peephole z88dk-397k
} if operandsNotRelated(%1 'bc'), operandsNotRelated(%1 'hl'), operandsNotRelated(%4 'bc'), operandsNotRelated(%4 'hl')

replace restart {
	ld	%2 (%3),%1
	ld	%6,%7 (%8)
	ld	%1,%2 (%3)
} by {
	ld	%2 (%3),%1
	ld	%6,%7 (%8)
	; peephole z88dk-397j1
} if operandsNotRelated(%1 %6)
// notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	a,%7
	%8	a,%1 (%2)
} by {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	a,%7
	%8	a,%3
	; peephole z88dk-397k1
} if notSame(%3 'a')
// if notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	a,%4
	%8	a,%5
	ld	%6,a
	ld	a,%7
	%9	a,%1 (%2)
} by {
	ld	%1 (%2),%3
	ld	a,%4
	%8	a,%5
	ld	%6,a
	ld	a,%7
	%9	a,%3
	; peephole z88dk-397k2
} if notSame(%6 %3), notSame(%3 'a')
// if notVolatile

replace restart {
	ld	%1 (%2),a
	ld	%3 (%4),%5
	ld	a,%6
	%7	a,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3 (%4),%5
	%7	a,%6
	; peephole z88dk-397k3
} if same(%7 'add' 'or' 'and' 'xor')

replace restart {
	ld	%1 (%2),%3
	%9	a,%4
	ld	%5,%6
	ld	%7,%8
	%10	a,%1 (%2)
} by {
	ld	%1 (%2),%3
	%9	a,%4
	ld	%5,%6
	ld	%7,%8
	%10	a,%3
	; peephole z88dk-397k4
} if notSame(%3 'a'), operandsNotRelated(%5 %3), operandsNotRelated(%7 %3)

replace restart {
	ld	%1 (%2),%3
	bit	%4,%1 (%2)
} by {
	ld	%1 (%2),%3
	bit	%4,%3
	; peephole z88dk-397l
} if canAssign(%3 '(hl)')
// if notVolatile

replace restart {
	ld	d,(hl)
	ld	e,%1
	ld	a,d
} by {
	ld	a,(hl)
	ld	e,%1
	ld	d,a
	; peephole z88dk-398a1
} if notSame(%1 'a'), notSame(%1 'd')

replace restart {
	ld	b,(hl)
	ld	c,%1
	ld	a,b
} by {
	ld	a,(hl)
	ld	c,%1
	ld	b,a
	; peephole z88dk-398b
} if notSame(%1 'a'), notSame(%1 'b')

replace restart {
	ld	d,(hl)
	ld	c,%1
	ld	a,d
} by {
	ld	a,(hl)
	ld	c,%1
	ld	d,a
	; peephole z88dk-398c
} if notSame(%1 'a'), notSame(%1 'd')

replace restart {
	ld	bc,(%1)
	ld	a,b
	or	a,c
} by {
	ld	hl,(%1)
	ld	a,h
	or	a,l
	; peephole z88dk-399a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc,(%1 + %2)
	ld	a,b
	or	a,c
} by {
	ld	hl,(%1 + %2)
	ld	a,h
	or	a,l
	; peephole z88dk-399b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	de,(%1)
	ld	a,d
	or	a,e
} by {
	ld	hl,(%1)
	ld	a,h
	or	a,l
	; peephole z88dk-399c
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	de,(%1 + %2)
	ld	a,d
	or	a,e
} by {
	ld	hl,(%1 + %2)
	ld	a,h
	or	a,l
	; peephole z88dk-399d
} if notUsed('de'), notUsed('hl')

replace restart {
	push	hl
	ld	de,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	pop	hl
} by {
	ld	de,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	; peephole z88dk-400a1
} if notUsed('hl')

replace restart {
	push	hl
	ld	de,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	pop	hl
} by {
	ex	de,hl
	ld	hl,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	ex	de,hl
	; peephole z88dk-400a2
} if notUsed('de')

replace restart {
	push	hl
	push	bc
	ld	de,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	pop	de
	ld	b,(hl)
	pop	hl
} by {
	push	bc
	ex	de,hl
	ld	hl,%1
	add	hl,de
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	ex	de,hl
	pop	de
	; peephole z88dk-400b
}

replace restart {
	push	%1
	ld	%2,(%1)
	ld	%4 (%5),%6
	inc	%1
	ld	%3,(%1)
	ld	%7 (%8),%9
	pop	%1
} by {
	ld	%2,(%1)
	ld	%4 (%5),%6
	inc	%1
	ld	%3,(%1)
	ld	%7 (%8),%9
	dec	%1
	; peephole z88dk-401
} if operandsNotRelated(%2 %1), operandsNotRelated(%3 %1)

replace restart {
	ld	c,l
	ld	b,h
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	a,b
	or	a,c
} by {
	ld	c,l
	ld	b,h
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	a,h
	or	a,l
	; peephole z88dk-403a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	push	bc
} by {
	ld	c,l
	ld	b,h
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	push	hl
	; peephole z88dk-403b
} if operandsNotRelated(%1 'hl'), operandsNotRelated(%4 'hl')

replace restart {
	ld	%1 (%2),#%3
	ld	%4,#%3
} by {
	ld	%4,#%3
	ld	%1 (%2),%4
	; peephole z88dk-404a
} if canAssign(%1 %2 %4)

replace restart {
	ld	%7,#%1
	ld	%8,#%2
	ld	%3 (%4),#%1
	ld	%5 (%6),#%2
} by {
	ld	%7,#%1
	ld	%8,#%2
	ld	%3 (%4),%7
	ld	%5 (%6),%8
	; peephole z88dk-404b
} if notSame(%7 %8), canAssign(%3 %4 %7), canAssign(%5 %6 %8)

replace restart {
	ld	%1,#<(%3)
	ld	%4 (%5),%1
	ld	%2,#>(%3)
	ld	%6 (%7),%2
} by {
	ld	%1,#<(%3)
	ld	%2,#>(%3)
	ld	%4 (%5),%1
	ld	%6 (%7),%2
	; peephole z88dk-405a
} if notSame(%1 %2)

replace restart {
	ld	%1,#%3
	ld	%4 (%5),%1
	ld	%2,#%8
	ld	%6 (%7),%2
} by {
	ld	%1,#%3
	ld	%2,#%8
	ld	%4 (%5),%1
	ld	%6 (%7),%2
	; peephole z88dk-405b
} if notSame(%1 %2)

replace restart {
	ld	e,#<(%1)
	ld	d,#>(%1)
} by {
	ld	de,#%1
	; peephole z88dk-406a
}

replace restart {
	ld	c,#<(%1)
	ld	b,#>(%1)
} by {
	ld	bc,#%1
	; peephole z88dk-406b
}

replace restart {
	ld	l,#<(%1)
	ld	h,#>(%1)
} by {
	ld	hl,#%1
	; peephole z88dk-406c
}

replace restart {
	ld	bc,(%1)
	ld	hl,%2
	add	hl,bc
	ld	c,l
	ld	b,h
} by {
	ld	hl,(%1)
	ld	bc,%2
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-407a
}

replace restart {
	ld	bc,(%1 + %3)
	ld	hl,%2
	add	hl,bc
	ld	c,l
	ld	b,h
} by {
	ld	hl,(%1 + %3)
	ld	bc,%2
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-407b
}

replace restart {
	ld	bc,(%1)
	ld	hl,%2
	add	hl,bc
} by {
	ld	hl,(%1)
	ld	bc,%2
	add	hl,bc
	; peephole z88dk-407c
} if notUsed('bc')

replace restart {
	ld	bc,(%1 + %3)
	ld	hl,%2
	add	hl,bc
} by {
	ld	hl,(%1 + %3)
	ld	bc,%2
	add	hl,bc
	; peephole z88dk-407d
} if notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	add	hl,bc
} by {
	ld	bc,%1
	add	hl,bc
	; peephole z88dk-407e
} if notUsed('bc')

replace restart {
	ld	l,c
	ld	h,b
	ld	bc,%1
	add	hl,bc
} by {
	ld	hl,%1
	add	hl,bc
	; peephole z88dk-407f
} if notUsed('bc')

replace restart {
	ld	e,l
	ld	d,h
	push	bc
	ld	bc,%1
	add	hl, bc
	pop	bc
} by {
	ld	e,l
	ld	d,h
	ld	hl,%1
	add	hl,de
	; peephole z88dk-407e
}

replace restart {
	push	%2
	ld	%2,#%1
	add	hl,%2
	pop	%2
} by {
	ld	a,#<(%1)
	add	a,l
	ld	l,a
	ld	a,#>(%1)
	adc	a,h
	ld	h,a
	; peephole z88dk-407f
} if notUsed('a')

replace restart {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	ld	a,c
} by {
	ld	a,(hl)
	inc	hl
	ld	b,(hl)
	ld	c,a
	; peephole z88dk-408a
}

replace restart {
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	ld	a,e
} by {
	ld	a,(hl)
	inc	hl
	ld	d,(hl)
	ld	e,a
	; peephole z88dk-408b
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(%1),hl
	ld	l,c
	ld	h,b
} by {
	ld	(%1),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-409a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	de,#%1
	ld	l,c
	ld	h,b
} by {
	ld	de,#%1
	ld	c,l
	ld	b,h
	; peephole z88dk-409b
}

replace restart {
	ld	%1,#0x00
	and	a,%2
	or	a,%1
} by {
	ld	%1,#0x00
	and	a,%2
	; peephole z88dk-410
}
// notVolatile

replace restart {
	ld	b,#0x09
%1:
	srl	d
	rr	e
	rr	l
	rr	c
	djnz	%1
} by {
	ld	c,l
	ld	l,e
	ld	e,d
	ld	d,#0x00
	ld	b,d
	srl	d
	rr	e
	rr	l
	rr	c
	; peephole z88dk-411a
}

replace restart {
	ld	a,#0x10
%1:
	srl	h
	rr	l
	rr	d
	rr	e
	dec	a
	%2	NZ,%1
} by {
	ld	d,h
	ld	e,l
	ld	hl,#0x0000
	; peephole z88dk-411b
} if notUsed('a')

replace restart {
	ld	a,#0x10
%1:
	srl	h
	rr	l
	rr	d
	rr	e
	dec	a
	%2	NZ,%1
} by {
	ld	d,h
	ld	e,l
	xor	a,a
	ld	l,a
	ld	h,a
	; peephole z88dk-411c
}

replace restart {
	ld	b,#0x09
%1:
	sra	l
	rr	c
	rr	d
	rr	e
	djnz	%1
} by {
	ld	e,d
	ld	d,c
	ld	c,l
	ld	a,l
	add	a,a
	sbc	a,a
	ld	l,a
	rr	c
	rr	d
	rr	e
	ld	b,#0x00
	; peephole z88dk-411d
} if notUsed('a')

replace restart {
	ld	b,#0x09
%1:
	sra	l
	rr	c
	rr	d
	rr	e
	djnz	%1
} by {
	ld	b,a
	ld	e,d
	ld	d,c
	ld	c,l
	ld	a,l
	add	a,a
	sbc	a,a
	ld	l,a
	rr	c
	rr	d
	rr	e
	ld	a,b
	ld	b,#0x00
	; peephole z88dk-411e
}

replace restart {
	ld	b,#0x19
%1:
	sra	l
	rr	d
	rr	e
	rr	c
	djnz	%1
} by {
	ld	c,l
	ld	a,l
	add	a,a
	sbc	a,a
	ld	e,a
	ld	d,a
	ld	l,a
	rr	e
	ld	b,#0x00
	; peephole z88dk-411f
} if notUsed('a')

replace restart {
	ld	b,#0x19
%1:
	sra	l
	rr	d
	rr	e
	rr	c
	djnz	%1
} by {
	ld	b,a
	ld	c,l
	ld	a,l
	add	a,a
	sbc	a,a
	ld	e,a
	ld	d,a
	ld	l,a
	rr	e
	ld	a,b
	ld	b,#0x00
	; peephole z88dk-411g
}

replace restart {
	ld	b,%2
%1:
	sra	%3 (%4)
	rr	%5 (%6)
	djnz	%1
} by {
	ld	b,%2
	ld	c,%3 (%4)
	ld	a,%5 (%6)
%1:
	sra	c
	rra
	djnz	%1
	ld	%3 (%4),c
	ld	%5 (%6),a
	; peephole z88dk-411h1
} if notUsed('a'), notUsed('c')
// notVolatile

replace restart {
	ld	b,%2
%1:
	sra	%3 (%4)
	rr	%5 (%6)
	djnz	%1
} by {
	ld	b,%2
	ld	e,%3 (%4)
	ld	a,%5 (%6)
%1:
	sra	e
	rra
	djnz	%1
	ld	%3 (%4),e
	ld	%5 (%6),a
	; peephole z88dk-411h2
} if notUsed('a'), notUsed('e')
// notVolatile

replace restart {
	ld	b,%2
%1:
	sra	%3 (%4)
	rr	%5 (%6)
	djnz	%1
} by {
	ld	b,%2
	ld	l,%3 (%4)
	ld	a,%5 (%6)
%1:
	sra	l
	rra
	djnz	%1
	ld	%3 (%4),l
	ld	%5 (%6),a
	; peephole z88dk-411h3
} if notUsed('a'), notUsed('l')
// notVolatile

replace restart {
	ld	a,%1
%2:
	sra	%4
	rr	%5
	dec	a
	%3	NZ,%2
} by {
	ld	a,%5
	ld	%5,%1
%2:
	sra	%4
	rra
	dec	%5
	jp	NZ,%2
	ld	%5,a
	ld	a,#0x00
	; peephole z88dk-411i
}

replace restart {
	ld	a,%1
%2:
	srl	%4
	rr	%5
	dec	a
	%3	NZ,%2
} by {
	ld	a,%5
	ld	%5,%1
%2:
	srl	%4
	rra
	dec	%5
	jp	NZ,%2
	ld	%5,a
	ld	a,#0x00
	; peephole z88dk-411j
}

replace restart {
	ld	b,%1
%2:
	srl	%3
	rr	%4
	djnz	%2
} by {
	ld	b,%1
	ld	a,%4
%2:
	srl	%3
	rra
	djnz	%2
	ld	%4,a
	; peephole z88dk-411k
} if notUsed('a')

replace restart {
	ld	a,#0x08
%1:
	srl	h
	rr	l
	rr	d
	rr	e
	dec	a
	%2	NZ,%1
} by {
	ld	e,d
	ld	d,l
	ld	l,h
	ld	h,0
	ld	a,h
	; peephole z88dk-411l
}

replace restart {
	ld	a,#%5
	jp	%2
%1:
	sla	%6 (%7)
	rl	%8 (%9)
%2:
	dec	a
	%4	NZ,%1
} by {
	ld	b,#%5
	ld	c,%6 (%7)
	ld	a,%8 (%9)
	jp	%2
%1:
	sla	c
	rla
%2:
	djnz	%1
	ld	%6 (%7),c
	ld	%8 (%9),a
	ld	a,b
	; peephole z88dk-411m1
} if notUsed('bc')
// notVolatile

replace restart {
	ld	a,#%5
	jp	%2
%1:
	sla	%6 (%7)
	rl	%8 (%9)
%2:
	dec	a
	%4	NZ,%1
} by {
	ld	e,#%5
	ld	d,%6 (%7)
	ld	a,%8 (%9)
	jp	%2
%1:
	sla	d
	rla
%2:
	dec	e
	jp	NZ,%1
	ld	%6 (%7),d
	ld	%8 (%9),a
	ld	a,e
	; peephole z88dk-411m2
} if notUsed('de')
// notVolatile

replace restart {
	ld	a,#%5
	jp	%2
%1:
	sla	%6 (%7)
	rl	%8 (%9)
%2:
	dec	a
	%4	NZ,%1
} by {
	ld	l,#%5
	ld	h,%6 (%7)
	ld	a,%8 (%9)
	jp	%2
%1:
	sla	h
	rla
%2:
	dec	l
	jp	NZ,%1
	ld	%6 (%7),h
	ld	%8 (%9),a
	ld	a,l
	; peephole z88dk-411m3
} if notUsed('hl')
// notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	ld	a,%13
%15:
	sla	%1 (%2)
	rl	%4 (%5)
	rl	%7 (%8)
	rl	%10 (%11)
	dec	a
	%14	NZ,%15
} by {
	ld	a,%13
%15:
	sla	%3
	rl	%6
	rl	%9
	rl	%12
	dec	a
	jp	NZ,%15
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	; peephole z88dk-411n
} if notUsed(%3), notUsed(%6), notUsed(%9), notUsed(%12)
// notVolatile

replace restart {
	ld	%1 (%2),#0x%3
	ld	%4 (%5),#0x%6
	ld	%7 (%8),#0x%9
	ld	%10 (%11),#0x%12
	inc	b
	jp	%13
%14:
	sla	%1 (%2)
	rl	%4 (%5)
	rl	%7 (%8)
	rl	%10 (%11)
%13:
	djnz	%14
} by {
	ld	hl,#0x%6%3
	ld	%7 (%8),#0x%9
	ld	%10 (%11),#0x%12
	inc	b
	jp	%13
%14:
	add	hl,hl
	rl	%7 (%8)
	rl	%10 (%11)
%13:
	djnz	%14
	ld	%1 (%2),l
	ld	%4 (%5),h
	; peephole z88dk-411o1
} if notUsed('hl')

replace restart {
	ld	%1 (%2),#0x%3
	ld	%4 (%5),#0x%6
	ld	%7 (%8),#0x%9
	ld	%10 (%11),#0x%12
	inc	b
	jp	%13
%14:
	sla	%1 (%2)
	rl	%4 (%5)
	rl	%7 (%8)
	rl	%10 (%11)
%13:
	djnz	%14
} by {
	ld	de,#0x%6%3
	ld	%7 (%8),#0x%9
	ld	%10 (%11),#0x%12
	inc	b
	jp	%13
%14:
	sla	e
	rl	d
	rl	%7 (%8)
	rl	%10 (%11)
%13:
	djnz	%14
	ld	%1 (%2),e
	ld	%4 (%5),d
	; peephole z88dk-411o2
} if notUsed('de')

replace restart {
	ld	%7 (%8),#0x%9
	ld	%10 (%11),#0x%12
	inc	b
	jp	%13
%14:
	add	hl,hl
	rl	%7 (%8)
	rl	%10 (%11)
%13:
	djnz	%14
} by {
	ld	de,#0x%12%9
	inc	b
	jp	%13
%14:
	add	hl,hl
	rl	e
	rl	d
%13:
	djnz	%14
	ld	%7 (%8),e
	ld	%10 (%11),d
	; peephole z88dk-411o3
} if notUsed('de')

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	ld	a,%13
%14:
	srl	%10 (%11)
	rr	%7 (%8)
	rr	%4 (%5)
	rr	%1 (%2)
	dec	a
	%15	NZ,%14
} by {
	ld	a,%13
%14:
	srl	%12
	rr	%9
	rr	%6
	rr	%3
	dec	a
	jp	NZ,%14
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	; peephole z88dk-411p1
}

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	ld	b,%13
%14:
	srl	%10 (%11)
	rr	%7 (%8)
	rr	%4 (%5)
	rr	%1 (%2)
	djnz	%14
} by {
	ld	b,%13
%14:
	srl	%12
	rr	%9
	rr	%6
	rr	%3
	djnz	,%14
	ld	%1 (%2),%3
	ld	%4 (%5),%6
	ld	%7 (%8),%9
	ld	%10 (%11),%12
	; peephole z88dk-411p2
}

replace restart {
	ld	a,#0x18
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x18
	ld	%6,%3
	xor	a,a
	ld	%3,a
	ld	%4,a
	ld	%5,a
	; peephole z88dk-411q1
}

replace restart {
	ld	b,#0x18
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	djnz	%1
} by {
	ld	%6,%3
	ld	b,#0x00
	ld	%3,b
	ld	%4,b
	ld	%5,b
	; peephole z88dk-411q2
}

replace restart {
	ld	de,%4
	ld	hl,%5
	ld	%6 (%7),#0x%8
	ld	%9 (%10),#0x%11
	ld	%12 (%13),#0x%14
	ld	%15 (%16),#0x%17
	inc	c
	jp	%3
%1:
	sla	%6 (%7)
	rl	%9 (%10)
	rl	%12 (%13)
	rl	%15 (%16)
%3:
	dec	c
	%2	NZ,%1
} by {
	ld	hl,#0x%11%8
	ld	de,#0x%17%14
	inc	c
	jp	%3
%1:
	add	hl,hl
	rl	e
	rl	d
%3:
	dec	c
	jp	NZ,%1
	ld	%6 (%7),l
	ld	%9 (%10),h
	ld	%12 (%13),e
	ld	%15 (%16),d
	ld	de,%4
	ld	hl,%5
	; peephole z88dk-411r1
}

replace restart {
	ld	de,%4
	ld	hl,%5
	ld	%6 (%7),#0x%8
	ld	%9 (%10),#0x%11
	ld	%12 (%13),#0x%14
	ld	%15 (%16),#0x%17
	inc	b
	jp	%3
%1:
	sla	%6 (%7)
	rl	%9 (%10)
	rl	%12 (%13)
	rl	%15 (%16)
%3:
	djnz	%1
} by {
	ld	hl,#0x%11%8
	ld	de,#0x%17%14
	inc	b
	jp	%3
%1:
	add	hl,hl
	rl	e
	rl	d
%3:
	djnz	%1
	ld	%6 (%7),l
	ld	%9 (%10),h
	ld	%12 (%13),e
	ld	%15 (%16),d
	ld	de,%4
	ld	hl,%5
	; peephole z88dk-411r2
}

replace restart {
	ld	a,#0x08
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x08
	ld	%6,%5
	ld	%5,%4
	ld	%4,%3
	xor	a,a
	ld	%3,a
	; peephole z88dk-411s
}

replace restart {
	ld	a,#0x07
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	xor	a,a
	rl	%6
	rl	%5
	rl	%4
	rl	%3
	ld	%6,%5
	ld	%5,%4
	ld	%4,%3
	ld	d,a
	rl	d
	; peephole z88dk-411t
}

replace restart {
	ld	a,#0x18
%1:
	sla	%3
	rl	%4
	rl	%5
	rl	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x18
	ld	%6,%3
	xor	a,a
	ld	%5,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411u1
}

replace restart {
	ld	a,#0x18
	ld	%7,%8
%1:
	sla	%3
	rl	%4
	rl	%5
	rl	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x18
	ld	%7,%8
	ld	%6,%3
	xor	a,a
	ld	%5,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411u2
} if notSame(%7 'a')

replace restart {
	ld	a,#0x10
%1:
	sla	%3
	rl	%4
	adc	hl,hl
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x10
	ld	l,%3
	ld	h,%4
	xor	a,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411v1
}

replace restart {
	ld	a,#0x10
	ld	%7,%8
%1:
	sla	%3
	rl	%4
	adc	hl,hl
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x10
	ld	%7,%8
	ld	l,%3
	ld	h,%4
	xor	a,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411v2
} if notSame(%7 'a')

replace restart {
	ld	a,#0x10
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x10
	ld	%5,%3
	ld	%6,%4
	xor	a,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411w1
}

replace restart {
	ld	a,#0x10
	ld	%7,%8
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	ld	a,#0x10
	ld	%7,%8
	ld	%5,%3
	ld	%6,%4
	xor	a,a
	ld	%4,a
	ld	%3,a
	; peephole z88dk-411w2
} if notSame(%7 'a')

replace restart {
	ld	b,#0x10
%1:
	sla	%2
	rl	%3
	adc	hl, hl
	djnz	%1
} by {
	ld	h,%3
	ld	l,%2
	ld	b,#0x00
	ld	%3,#0x00
	ld	%2,#0x00
	; peephole z88dk-411x1
}

replace restart {
	ld	b,#0x10
	ld	%7,%8
%1:
	sla	%2
	rl	%3
	adc	hl, hl
	djnz	%1
} by {
	ld	b,#0x10
	ld	%7,%8
	ld	h,%3
	ld	l,%2
	ld	b,#0x00
	ld	%3,#0x00
	ld	%2,#0x00
	; peephole z88dk-411x2
} if operandsNotRelated(%7 'b')

replace restart {
	ld	b,#0x18
%2:
	sla	%3 (%4)
	rl	%5 (%6)
	rl	%7 (%8)
	rl	%9 (%10)
	djnz	%2
} by {
	ld	a,%3 (%4)
	ld	%9 (%10),a
	xor	a,a
	ld	b,a
	ld	%7 (%8),a
	ld	%5 (%6),a
	ld	%3 (%4),a
	; peephole z88dk-411y
} if notUsed('a')

replace restart {
	ld	b,#0x10
%2:
	sla	%3 (%4)
	rl	%5 (%6)
	rl	%7 (%8)
	rl	%9 (%10)
	djnz	%2
} by {
	ld	a,%5 (%6)
	ld	%9 (%10),a
	ld	a,%3 (%4)
	ld	%7 (%8),a
	xor	a,a
	ld	b,a
	ld	%5 (%6),a
	ld	%3 (%4),a
	; peephole z88dk-411z
} if notUsed('a')

replace restart {
	ld	b,#0x09
%1:
	srl	%2
	rr	%3
	rr	%4
	rr	%5
	djnz	%1
} by {
	srl	%2
	rr	%3
	rr	%4
	ld	%5,%4
	ld	%4,%3
	ld	%3,%2
	ld	b,#0x00
	ld	%2,#0x00
	; peephole z88dk-411aa
}

replace restart {
	ld	a,#0x09
%1:
	srl	%3
	rr	%4
	rr	%5
	rr	%6
	dec	a
	%2	NZ,%1
} by {
	srl	%3
	rr	%4
	rr	%5
	ld	%6,%5
	ld	%5,%4
	ld	%4,%3
	xor	a,a
	ld	%3,a
	; peephole z88dk-411ab
}

replace restart {
	ld	a,#0x09
%1:
	sla	%3
	rl	%4
	adc	hl, hl
	dec	a
	%2	NZ,%1
} by {
	ld	h,l
	ld	l,%4
	ld	%4,%3
	xor	a,a
	sla	%4
	adc	hl,hl
	ld	%3,a
	; peephole z88dk-411ac
}

replace restart {
	ld	a,#0x09
%1:
	add	hl, hl
	rl	%3
	rl	%4
	dec	a
	%2	NZ,%1
} by {
	ld	%4,%3
	ld	%3,h
	ld	h,l
	xor	a,a
	sla	h
	rl	%3
	rl	%4
	ld	l,a
	; peephole z88dk-411ad
}

replace restart {
	ld	a,#0x09
%1:
	sla	%3
	rl	%4
	rl	%5
	rl	%6
	dec	a
	%2	NZ,%1
} by {
	ld	%6,%5
	ld	%5,%4
	ld	%4,%3
	xor	a,a
	sla	%4
	rl	%5
	rl	%6
	ld	%3,a
	; peephole z88dk-411ae
}

replace restart {
	jp	%1
%2:
	sla	e
	rl	d
%1:
	dec	l
	%3	NZ,%2
} by {
	ex	de,hl
	jp	%1
%2:
	add	hl,hl
%1:
	dec	e
	%3	NZ,%2
	ex	de,hl
	; peephole z88dk-411af
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,#%1
%2:
	sla	c
	rl	b
	rl	e
	rl	d
	dec	a
	%3	NZ,%2
} by {
	ld	a,#%1
%2:
	add	hl,hl
	rl	e
	rl	d
	dec	a
	%3	NZ,%2
	ld	c,l
	ld	b,h
	; peephole z88dk-411ag
} if notUsed('hl')

replace restart {
	jp	%1
%2:
	sla	e
	rl	d
%1:
	dec	a
	%3	NZ,%2
} by {
	ex	de,hl
	jp	%1
%2:
	add	hl,hl
%1:
	dec	a
	%3	NZ,%2
	ex	de,hl
	; peephole z88dk-411ah
} if notUsed('hl')

replace restart {
	jp	%1
%2:
	ld	hl,(#%3)
	add	hl,hl
	ld	(#%3),hl
%1:
	djnz	%2
} by {
	ld	hl,(#%3)
	jp	%1
%2:
	add	hl,hl
%1:
	djnz	%2
	ld	(#%3),hl
	; peephole z88dk-411ai
} if notVolatile(%3)

replace restart {
	jp	%1
%2:
	ld	hl,#%3 + 1
	srl	(hl)
	dec	hl
	rr	(hl)
%1:
	djnz	%2
} by {
	ld	hl,(#%3)
	jp	%1
%2:
	srl	h
	rr	l
%1:
	djnz	%2
	ld	(#%3),hl
	ld	hl,#%3
	; peephole z88dk-411aj
} if notVolatile(%3)

replace restart {
	ld	c,l
	ld	b,h
%1:
	sla	c
	rl	b
	rl	e
	rl	d
	dec	a
	%2	NZ,%1
} by {
	ld	b,a
%1:
	add	hl,hl
	rl	e
	rl	d
	djnz	%1
	ld	a,b
	ld	c,l
	ld	b,h
	; peephole z88dk-411ak
} if notUsed('hl')

replace restart {
	ld	a,#%1
%2:
	add	hl,hl
	rl	e
	rl	d
	dec	a
	%3	NZ,%2
} by {
	ld	b,#%1
%2:
	add	hl,hl
	rl	e
	rl	d
	djnz	%2
	ld	a,b
	; peephole z88dk-411al
} if notUsed('b')

replace restart {
	ld	c,l
	ld	b,h
	ld	l,e
	ld	h,d
	ld	a,#%1
%2:
	sla	c
	rl	b
	adc	hl,hl
	dec	a
	%3	NZ,%2
} by {
	ld	b,#%1
%2:
	add	hl,hl
	rl	e
	rl	d
	djnz	%2
	ld	a,b
	ld	c,l
	ld	b,h
	ex	de,hl
	; peephole z88dk-411am
} if notUsed('de')

replace restart {
	ld	a,#%1
	ex	de,hl
	ld	c,e
	ld	b,d
%2:
	sla	c
	rl	b
	adc	hl,hl
	dec	a
	%3	NZ,%2
} by {
	ld	b,#%1
%2:
	add	hl,hl
	rl	e
	rl	d
	djnz	%2
	ld	a,b
	ex	de,hl
	ld	c,e
	ld	b,d
	; peephole z88dk-411an
} if notUsed('de')





replace restart {
	ld	%1,(hl)
	ld	a,%1
} by {
	ld	a,(hl)
	ld	%1,a
	; peephole z88dk-412
} if notSame(%1 'a')

replace restart {
	pop	%1
	ld	(%2),%1
} by {
	pop	hl
	ld	(%2),hl
	; peephole z88dk-413a
} if notUsed(%1), notUsed('hl'), notSame(%1 'hl')

replace restart {
	pop	%1
	ld	(%2 + %3),%1
} by {
	pop	hl
	ld	(%2 + %3),hl
	; peephole z88dk-413b
} if notUsed(%1), notUsed('hl'), notSame(%1 'hl')

replace restart {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	ld	(%5),bc
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(%5),hl
	; peephole z88dk-413c
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	ld	(%5 + %6),bc
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(%5 + %6),hl
	; peephole z88dk-413d
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	ld	(%5),de
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(%5),hl
	; peephole z88dk-413e
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	ld	(%5 + %6),de
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(%5 + %6),hl
	; peephole z88dk-413f
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	%2 (%1),%5
	ld	%3 (%1),%4
	ld	%6,%2 (%1)
} by {
	ld	%2 (%1),%5
	ld	%3 (%1),%4
	ld	%6,%5
	; peephole z88dk-414a
} if notSame(%2 %3)
// notVolatile

replace restart {
	ld	%4,%5
	ld	%1 (%2),%3
	ld	%5,%4
} by {
	ld	%4,%5
	ld	%1 (%2),%3
	; peephole z88dk-414b
} if canAssign(%4 '(hl)'), canAssign(%5 '(hl)')

replace restart {
	ld	%1 (%2),%3
	ld	%5,%6
	add	a,%7
	ld	%1 (%2),%4
} by {
	ld	%5,%6
	add	a,%7
	ld	%1 (%2),%4
	; peephole z88dk-414c
} if canAssign(%5 '(hl)')
// notVolatile

replace restart {
	ld	%1 (%2),%3
	ld	%4 (%2),%6
	ld	a,%7
	or	a,%1 (%2)
} by {
	ld	%1 (%2),%3
	ld	%4 (%2),%6
	ld	a,%7
	or	a,%3
	; peephole z88dk-414d
} if notSame(%1 %4)
// notVolatile

replace restart {
	ld	%1,%2 (%3)
	ld	%5,%6 (%3)
	ld	%4,%1
} by {
	ld	%4,%2 (%3)
	ld	%5,%6 (%3)
	; peephole z88dk-414e
} if notUsed(%1), canAssign(%4 '(hl)'), notSame(%4 %5), notSame(%1 %5)

replace restart {
	ld	%1,%2 (%3)
	ld	%5,%6 (%3)
	ld	%7,%8 (%3)
	ld	%4,%1
} by {
	ld	%4,%2 (%3)
	ld	%5,%6 (%3)
	ld	%7,%8 (%3)
	; peephole z88dk-414f
} if notUsed(%1), canAssign(%4 '(hl)'), notSame(%4 %5), notSame(%4 %7), notSame(%1 %5), notSame(%1 %7)

replace restart {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	sla	%1 (%2)
	rl	%3 (%4)
} by {
	sla	%5
	rl	%6
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	; peephole z88dk-414g1
} if notUsed(%5), notUsed(%6), canAssign(%5 '(hl)'), canAssign(%6 '(hl)')
// notVolatile

replace restart {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	sla	%1 (%2)
	rl	%3 (%4)
} by {
	ld	l,%5
	ld	h,%6
	add	hl,hl
	ld	%1 (%2),l
	ld	%3 (%4),h
	; peephole z88dk-414g2
} if notUsed('hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	; peephole z88dk-414h1
} if operandsNotRelated(%5 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	%7
	; peephole z88dk-414h1a
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	dec	%7
	; peephole z88dk-414h1b
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	hl
	; peephole z88dk-414h2
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	inc	%7
	dec	hl
	; peephole z88dk-414h3a
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	%7
	dec	hl
	; peephole z88dk-414h3b
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	; peephole z88dk-414h4  INCORRECT IF POINTER POINTS TO SELF
}
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	%7
	; peephole z88dk-414h4a  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	dec	%7
	; peephole z88dk-414h4b  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	hl
	; peephole z88dk-414h5  INCORRECT IF POINTER POINTS TO SELF
}
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	inc	%7
	dec	hl
	; peephole z88dk-414h5a  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	%7
	dec	hl
	; peephole z88dk-414h5b  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	; peephole z88dk-414i1
} if operandsNotRelated(%5 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	%7
	; peephole z88dk-414i1a
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	dec	%7
	; peephole z88dk-414i1b
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	hl
	; peephole z88dk-414i2
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	inc	%7
	dec	hl
	; peephole z88dk-414i3a
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	%5,(hl)
	inc	hl
	ld	%6,(hl)
	dec	%7
	dec	hl
	; peephole z88dk-414i3b
} if operandsNotRelated(%5 'hl'), operandsNotRelated(%6 'hl'), operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	; peephole z88dk-414i4  INCORRECT IF POINTER POINTS TO SELF
}
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	%7
	; peephole z88dk-414ia  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	dec	%7
	; peephole z88dk-414i4b  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	hl
	; peephole z88dk-414i5  INCORRECT IF POINTER POINTS TO SELF
}
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	inc	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	inc	%7
	dec	hl
	; peephole z88dk-414i5a  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	%7
	ld	l,%1 (%2)
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	(hl),%5
	inc	hl
	ld	(hl),%6
	dec	%7
	dec	hl
	; peephole z88dk-414i5b  INCORRECT IF POINTER POINTS TO SELF
} if operandsNotRelated(%7 'hl')
// notVolatile

replace restart {
	ld	%1,%2 (%3)
	ld	%4 (%3),%5
	ld	%1,%2 (%3)
} by {
	ld	%1,%2 (%3)
	ld	%4 (%3),%5
	; peephole z88dk-414j
} if notSame(%2 %4)
// notVolatile

replace restart {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	ld	%9,%10
	ld	%7,%1 (%2)
	ld	%8,%3 (%4)
} by {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	ld	%9,%10
	ld	%7,%5
	ld	%8,%6
	; peephole z88dk-414k1
} if operandsNotRelated(%9 %5), operandsNotRelated(%9 %6)

replace restart {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	ld	%9,%10
	ld	%7,%1 (%2)
	ld	%8,%3 (%4)
} by {
	ld	%1 (%2),%5
	ld	%3 (%4),%6
	ld	%7,%5
	ld	%8,%6
	ld	%9,%10
	; peephole z88dk-414k2
} if operandsNotRelated(%9 %7), operandsNotRelated(%9 %8), operandsNotRelated(%10 %7), operandsNotRelated(%10 %8)

replace restart {
	ld	%1 (%2),a
	ld	a,%4 (%5)
	adc	a,%6 (%7)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3,a
	ld	a,%4 (%5)
	adc	a,%6 (%7)
	; peephole z88dk-414l1
}

replace restart {
	ld	%1 (%2),a
	ld	a,%4 (%5)
	add	a,%6 (%7)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3,a
	ld	a,%4 (%5)
	add	a,%6 (%7)
	; peephole z88dk-414l2
}

replace restart {
	ld	%1 (%2),a
	ld	a,%4 (%5)
	sbc	a,%6 (%7)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3,a
	ld	a,%4 (%5)
	sbc	a,%6 (%7)
	; peephole z88dk-414l3
}

replace restart {
	ld	%1 (%2),a
	ld	a,%4 (%5)
	sub	a,%6 (%7)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3,a
	ld	a,%4 (%5)
	sub	a,%6 (%7)
	; peephole z88dk-414l4
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, #<(%2)
	ld	c,a
	inc	hl
	ld	a,(hl)
	sbc	a, #>(%2)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	bc,#%2
	xor	a,a
	sbc	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-415a
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a,l
	sub	a, #<(%1)
	ld	c,a
	ld	a,h
	sbc	a, #>(%1)
	ld	b,a
	ld	hl,%2
	push	hl
	push	bc
} by {
	ld	bc,#%1
	xor	a,a
	sbc	hl,bc
	ld	bc,%2
	push	bc
	push	hl
	; peephole z88dk-415b
} if notUsed('a'), notUsed('bc'), notUsed('hl')

replace restart {
	ld	a,#0x%1
	sub	a, c
	ld	l,a
	ld	a,#0x%2
	sbc	a, b
	ld	h,a
} by {
	ld	hl,#0x%2%1
	xor	a,a
	sbc	hl,bc
	ld	a,h
	; peephole z88dk-415c
}

replace restart {
	ld	a,e
	ld	hl,#%1
	sub	a,(hl)
	ld	e,a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-415d1
} if notUsed('hl')

replace restart {
	ld	a,e
	ld	hl,#%1 + %2
	sub	a,(hl)
	ld	e,a
	ld	a,d
	inc	hl
	sbc	a,(hl)
	ld	d,a
} by {
	ld	hl,(#%1 + %2)
	ex	de,hl
	xor	a,a
	sbc	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-415d2
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a, c
	ld	c,a
	inc	hl
	ld	a,(hl)
	sbc	a, b
	ld	b,a
} by {
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-415e1
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	sub	a, c
	ld	c,a
	inc	hl
	ld	a,(hl)
	sbc	a, b
	ld	b,a
} by {
	ld	hl,(#%1 + %2)
	xor	a,a
	sbc	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-415e2
} if notUsed('hl')

replace restart {
	ld	a,c
	ld	hl,#%1 + 1
	sub	a, e
	dec	hl
	ld	(hl),a
	ld	a,b
	sbc	a, d
	inc	hl
	ld	(hl),a
} by {
	ld	l,c
	ld	h,b
	xor	a,a
	sbc	hl,de
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-415f
}

replace restart {
	ld	a,e
	sub	a,c
	ld	l,a
	ld	a,d
	sbc	a,b
	ld	h,a
} by {
	ld	l,e
	ld	h,d
	xor	a,a
	sbc	hl,bc
	; peephole z88dk-415g
} if notUsed('a')








replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	push	hl
	push	bc
} by {
	ld	bc,%1
	push	bc
	push	hl
	; peephole z88dk-416a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc, (%1)
	push	de
	push	bc
} by {
	push	de
	ld	hl,(%1)
	push	hl
	; peephole z88dk-416b
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	bc,(%1)
	ld	de,%2
	push	de
} by {
	ld	de,%2
	ld	bc,(%1)
	push	de
	; peephole z88dk-416c
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	push	hl
	push	de
	push	bc
} by {
	ld	bc,#%1
	push	bc
	push	de
	push	hl
	; peephole z88dk-416d
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	xor	a,a
	push	af
	inc	sp
	push	bc
} by {
	ld	c,l
	ld	b,h
	xor	a,a
	push	af
	inc	sp
	push	hl
	; peephole z88dk-416e1
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,%1
	push	af
	inc	sp
	push	de
	push	bc
} by {
	ld	c,l
	ld	b,h
	ld	a,%1
	push	af
	inc	sp
	push	de
	push	hl
	; peephole z88dk-416e2
}

replace restart {
	ex	de,hl
	xor	a,a
	push	af
	inc	sp
	push	bc
	push	de
} by {
	xor	a,a
	push	af
	inc	sp
	push	bc
	push	hl
	; peephole z88dk-416f1
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	a,%1
	push	af
	inc	sp
	push	bc
	push	de
} by {
	ld	a,%1
	push	af
	inc	sp
	push	bc
	push	hl
	; peephole z88dk-416f2
} if notUsed('de'), notUsed('hl'), operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	de,(%1)
	ld	a,e
	ld	(bc),a
	inc	bc
	ld	a,d
	ld	(bc),a
} by {
	ld	de,(%1)
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	a,d
	ld	c,l
	ld	b,h
	dec	hl
	; peephole z88dk-417a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	de,(%1 + %2)
	ld	a,e
	ld	(bc),a
	inc	bc
	ld	a,d
	ld	(bc),a
} by {
	ld	de,(%1 + %2)
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	a,d
	ld	c,l
	ld	b,h
	dec	hl
	; peephole z88dk-417b
}

replace restart {
	ld	e,l
	ld	d,h
	ld	(hl),a
	push	de
} by {
	ld	(hl),a
	push	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-418a
}

replace restart {
	ld	e,l
	ld	d,h
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	push	de
} by {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	dec	hl
	push	hl
	; peephole z88dk-418b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,l
	ld	d,h
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	push	bc
	push	de
} by {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	dec	hl
	push	bc
	push	hl
	; peephole z88dk-418c
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,c
	ld	d,b
	push	bc
	push	de
} by {
	push	bc
	push	bc
	ld	e,c
	ld	d,b
	; peephole z88dk-418d
}

replace restart {
	ld	e,l
	ld	d,h
	push	bc
	push	de
} by {
	push	bc
	push	hl
	ld	e,l
	ld	d,h
	; peephole z88dk-418e
}

replace restart {
	ld	e,c
	ld	d,b
	push	de
} by {
	push	bc
	ld	e,c
	ld	d,b
	; peephole z88dk-418f
}

replace restart {
	ld	c,e
	ld	b,d
	push	bc
} by {
	push	de
	ld	c,e
	ld	b,d
	; peephole z88dk-418g
}

replace restart {
	ld	e, c
	ld	d, b
	push	bc
	ld	hl,%1
	push	hl
	ld	hl,%2
	push	hl
	push	de
} by {
	push	bc
	ld	hl,%1
	push	hl
	ld	hl,%2
	push	hl
	push	bc
	ld	e,c
	ld	d,b
	; peephole z88dk-418h
}

replace restart {
	ld	hl,#%1 + 1
	push	bc
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
} by {
	push	bc
	ld	bc,(#%1)
	ld	hl,#%1
	; peephole z88dk-418i
}

replace restart {
	ex	de,hl
	pop	bc
	ld	a,d
	or	a,e
} by {
	pop	bc
	ld	a,h
	or	a,l
	ex	de,hl
	; peephole z88dk-418j
}

replace restart {
	ex	de,hl
	pop	bc
	xor	a, a
	cp	a, e
	sbc	a, d
} by {
	pop	bc
	xor	a,a
	cp	a,l
	sbc	a,h
	ex	de,hl
	; peephole z88dk-418k
}

replace restart {
	ld	e,c
	ld	d,b
	push	hl
	push	de
} by {
	push	hl
	push	bc
	ld	e,c
	ld	d,b
	; peephole z88dk-418l
}

replace restart {
	ld	c,d
	ld	b,e
	push	de
	push	af
	inc	sp
	push	bc
} by {
	push	de
	push	af
	inc	sp
	push	de
	ld	c,d
	ld	b,e
	; peephole z88dk-418m
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	ld	de,%2
	push	de
	push	bc
	push	hl
} by {
	ld	bc,%1
	ld	de,%2
	push	de
	push	hl
	push	bc
	; peephole z88dk-418n
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	push	bc
} by {
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	dec	hl
	push	hl
	; peephole z88dk-418o
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	push	bc
} by {
	push	hl
	ld	hl,%1
	; peephole z88dk-418p1
} if notUsed('bc')

replace restart {
	ld	c,e
	ld	b,d
	ld	hl,%1
	push	bc
} by {
	push	de
	ld	hl,%1
	; peephole z88dk-418p2
} if notUsed('bc')

replace restart {
	ex	de,hl
	ld	hl,%1
	push	de
} by {
	push	hl
	ld	hl,%1
	; peephole z88dk-418q
} if notUsed('de')

replace restart {
	ld	c,e
	ld	b,d
	push	de
	push	bc
} by {
	push	de
	push	de
	ld	c,e
	ld	b,d
	; peephole z88dk-418r
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	push	de
	push	bc
} by {
	push	de
	push	hl
	ld	hl,%1
	; peephole z88dk-418s
} if notUsed('bc')

replace restart {
	ld	e,c
	ld	d,b
	ld	hl,%1
	push	bc
	push	de
} by {
	ld	hl,%1
	push	bc
	push	bc
	ld	e,c
	ld	d,b
	; peephole z88dk-418t
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	push	bc
} by {
	push	hl
	ld	c,l
	ld	b,h
	ld	hl,%1
	; peephole z88dk-418u
}

replace restart {
	ld	hl,%1
	ld	%3,%2
	push	%3
} by {
	ld	%3,%2
	push	%3
	ld	hl,%1
	; peephole z88dk-418v
} if notSame(%3 'hl')

replace restart {
	push	af
	ld	hl,%1
	ex	(sp), hl
} by {
	ld	hl,%1
	push	hl
	; peephole z88dk-418w
} if notUsed('hl')

replacer restart {
	ld	c,e
	ld	b,d
	push	hl
	push	bc
} by {
	push	hl
	push	de
	ld	c,e
	ld	b,d
	; peephole z88dk-418x
}

replace restart {
	ex	(sp), hl
	pop	hl
	push	hl
} by {
	pop	bc
	push	hl
	; peephole z88dk-418y1
} if notUsed('bc')

replace restart {
	ex	(sp), hl
	pop	hl
	push	hl
} by {
	pop	de
	push	hl
	; peephole z88dk-418y2
} if notUsed('de')

replace restart {
	ld	c,e
	ld	b,d
	push	de
	ld	hl,%1
	push	hl
	ld	hl,%2
	push	hl
	push	bc
} by {
	push	de
	ld	hl,%1
	push	hl
	ld	hl,%2
	push	hl
	push	de
	; peephole z88dk-418z
} if notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	pop	hl
	push	hl
	push	bc
	push	hl
} by {
	pop	bc
	push	bc
	push	hl
	push	bc
	; peephole z88dk-418aa
} if notUsed('bc'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	hl,%1
	push	hl
	push	de
} by {
	ld	de,%1
	push	de
	push	hl
	; peephole z88dk-418ab
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	e,c
	ld	d,b
	sla	e
	rl	d
} by {
	ld	l,c
	ld	h,b
	add	hl,hl
	ex	de,hl
	; peephole z88dk-419a
} if notUsed('hl')

replace restart {
	ld	e,c
	ld	d,b
	sla	e
	rl	d
} by {
	ld	e,c
	ld	d,b
	ex	de,hl
	add	hl,hl
	ex	de,hl
	; peephole z88dk-419b
}

replace restart {
	cp	a,a
	sbc	hl,%1
} by {
	xor	a,a
	sbc	hl,%1
	; peephole z88dk-420a
} if notUsed('a')

replace restart {
	ld	c,l
	ld	b,h
	ld	a,%1 (%2)
	add	a,c
	ld	c,a
	ld	a,%3 (%4)
	adc	a,b
	ld	b,a
} by {
	ld	a,%1 (%2)
	add	a,l
	ld	c,a
	ld	a,%3 (%4)
	adc	a,h
	ld	b,a
	; peephole z88dk-420b
}

replace restart {
	ld	%1,l
	ld	a,h
	sla	%1
	rla
} by {
	add	hl,hl
	ld	%1,l
	ld	a,h
	; peephole z88dk-421a
} if notUsed('hl')

replace restart {
	ld	bc,(%1)
	sla	c
	rl	b
} by {
	ld	hl,(%1)
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-421b1
} if notUsed('hl')

replace restart {
	ld	bc,(%1 + %2)
	sla	c
	rl	b
} by {
	ld	hl,(%1 + %2)
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-421b2
} if notUsed('hl')

replace restart {
	ld	de,(%1)
	sla	e
	rl	d
} by {
	ld	hl,(%1)
	add	hl,hl
	ld	e,l
	ld	d,h
	; peephole z88dk-421c1
} if notUsed('hl')

replace restart {
	ld	de,(%1 + %2)
	sla	e
	rl	d
} by {
	ld	hl,(%1 + %2)
	add	hl,hl
	ld	e,l
	ld	d,h
	; peephole z88dk-421c2
} if notUsed('hl')

replace restart {
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
	sla	c
	rl	b
	sla	c
	rl	b
} by {
	ld	b,(hl)
	dec	hl
	ld	l,(hl)
	ld	h,b
	add	hl,hl
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-421d
} if notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	dec	bc
} by {
	dec	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-422a
} if notUsed('hl')

replace restart {
	dec	bc
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	dec	hl
	; peephole z88dk-422b
} if notUsed('bc')

replace restart {
	ld	c,l
	ld	b,h
	inc	bc
} by {
	inc	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-422c
} if notUsed('hl')

replace restart {
	inc	bc
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	inc	hl
	; peephole z88dk-422d
} if notUsed('bc')

replace restart {
	pop	bc
	push	bc
	ld	l,c
	ld	h,b
} by {
	pop	hl
	push	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-422e
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,%1
	cp	a,c
	ld	a,%2
	sbc	a,b
} by {
	ld	a,%1
	cp	a,l
	ld	a,%2
	sbc	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-423
} if notSame(%1 'b'), notSame(%1 'c'), notSame(%2 'b'), notSame(%2 'c')

replace restart {
	ld	%2,a
	ld	hl,#%1
	ld	(hl),%2
} by {
	ld	(#%1),a
	ld	%2,a
	; peephole z88dk-424a
} if notUsed('hl')

replace restart {
	ld	%2,a
	ld	hl,#%1
	ld	(hl),%2
} by {
	ld	hl,#%1
	ld	(hl),a
	ld	%2,a
	; peephole z88dk-424b
}

replace restart {
	ld	%2,a
	ld	hl,#%1 + %3
	ld	(hl),%2
} by {
	ld	(#%1 + %3),a
	ld	%2,a
	; peephole z88dk-424c
} if notUsed('hl')

replace restart {
	ld	%2,a
	ld	hl,#%1 + %3
	ld	(hl),%2
} by {
	ld	hl,#%1 + %3
	ld	(hl),a
	ld	%2,a
	; peephole z88dk-424d
}

replace restart {
	ld	%9,#%1
	or	a,%5
	jp	%4,%3
} by {
	or	a,%5
	jp	%4,%3
	ld	%9,#%1
	; peephole z88dk-425a1
} if notUsedFrom(%3 %9), operandsNotRelated(%5 %9), notSame(%9 'a')

replace restart {
	ld	%9,#%1 + %2
	or	a,%5
	jp	%4,%3
} by {
	or	a,%5
	jp	%4,%3
	ld	%9,#%1 + %2
	; peephole z88dk-425a2
} if notUsedFrom(%3 %9), operandsNotRelated(%5 %9), notSame(%9 'a')

replace restart {
	ld	%9,#%1
	jp	%2,%3
} by {
	jp	%2,%3
	ld	%9,#%1
	; peephole z88dk-425b1
} if notUsedFrom(%3 %9)

replace restart {
	ld	%9,#%1 + %4
	jp	%2,%3
} by {
	jp	%2,%3
	ld	%9,#%1 + %4
	; peephole z88dk-425b2
} if notUsedFrom(%3 %9)

replace restart {
	ld	%1,%2
	jp	%3,%4
} by {
	jp	%3,%4
	ld	%1,%2
	; peephole z88dk-425b3
} if canAssign(%1 '(hl)'), notUsedFrom(%4 %1)

replace restart {
	ld	%9,#%1
	ld	%7,%6
	or	a,%5
	jp	%4,%3
} by {
	ld	%7,%6
	or	a,%5
	jp	%4,%3
	ld	%9,#%1
	; peephole z88dk-425c1
} if notUsedFrom(%3 %9), operandsNotRelated(%5 %9), operandsNotRelated(%6 %9), operandsNotRelated(%7 %9), notSame(%9 'a')

replace restart {
	ld	%9,#%1 + %2
	ld	%7,%6
	or	a,%5
	jp	%4,%3
} by {
	ld	%7,%6
	or	a,%5
	jp	%4,%3
	ld	%9,#%1 + %2
	; peephole z88dk-425c2
} if notUsedFrom(%3 %9), operandsNotRelated(%5 %9), operandsNotRelated(%6 %9), operandsNotRelated(%7 %9), notSame(%9 'a')

replace restart {
	ld	%5,%6
	ld	a,%3
	or	a,%4
	jp	%1,%2
} by {
	ld	a,%3
	or	a,%4
	jp	%1,%2
	ld	%5,%6
	; peephole z88dk-425d1
} if canAssign(%5 '(hl)'), notUsedFrom(%2 %5), operandsNotRelated(%5 %3), operandsNotRelated(%5 %4), notSame(%5 'a'), notSame(%6 'a')

replace restart {
	ld	%5,%6
	or	a,%4
	jp	%1,%2
} by {
	or	a,%4
	jp	%1,%2
	ld	%5,%6
	; peephole z88dk-425d2
} if canAssign(%5 '(hl)'), notUsedFrom(%2 %5), operandsNotRelated(%5 %4), notSame(%5 'a'), notSame(%6 'a')

replace restart {
	ld	%7,%8
	ld	%5,%6
	or	a,%4
	jp	%1,%2
} by {
	ld	%5,%6
	or	a,%4
	jp	%1,%2
	ld	%7,%8
	; peephole z88dk-425d3
} if canAssign(%7 '(hl)'), notUsedFrom(%2 %7), operandsNotRelated(%7 %4), operandsNotRelated(%7 %6), operandsNotRelated(%7 %5), operandsNotRelated(%8 %5), notSame(%7 'a'), notSame(%8 'a')

replace restart {
	jp	%1,%2
	jp	%1,%3
} by {
	jp	%1,%2
	; peephole z88dk-425e
}

replace restart {
	ld	%1,%2
	bit	%3,%4
	jp	%5,%6
} by {
	bit	%3,%4
	jp	%5,%6
	ld	%1,%2
	; peephole z88dk-425f1
} if canAssign(%1 '(hl)'), operandsNotRelated(%1 %4), notUsedFrom(%6 %1)

replace restart {
	ld	%7,%8
	ld	%1,%2
	bit	%3,%4
	jp	%5,%6
} by {
	ld	%1,%2
	bit	%3,%4
	jp	%5,%6
	ld	%7,%8
	; peephole z88dk-425f2
} if canAssign(%7 '(hl)'), operandsNotRelated(%2 %7), operandsNotRelated(%1 %7), operandsNotRelated(%7 %4), operandsNotRelated(%8 %1), notUsedFrom(%6 %7)

replace restart {
	ld	e,c
	ld	d,b
	ld	hl,%1
	add	hl,de
} by {
	ld	e,c
	ld	d,b
	ld	hl,%1
	add	hl,bc
	; peephole z88dk-426a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,%1 (%2)
	ld	(bc),a
} by {
	ld	a,%1 (%2)
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole z88dk-426b1
}

replace restart {
	ld	c,l
	ld	b,h
	inc	bc
	ld	a,%1 (%2)
	ld	(bc),a
} by {
	inc	hl
	ld	a,%1 (%2)
	ld	(hl),a
	ld	c,l
	ld	b,h
	dec	hl
	; peephole z88dk-426b2
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	ld	%3 (%4),a
	inc	hl
	ld	a,(hl)
} by {
	ld	hl,(#%1)
	ld	%3 (%4),l
	ld	a,h
	; peephole z88dk-427a
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	ld	%3 (%4),a
	inc	hl
	ld	a,(hl)
} by {
	ld	hl,(#%1 + %2)
	ld	a,l
	ld	%3 (%4),a
	ld	a,h
	; peephole z88dk-427b
} if notUsed('hl')

replace restart {
	inc	hl
	ld	b,(hl)
	dec	hl
	ld	c,(hl)
} by {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	dec	hl
	; peephole z88dk-428
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	ld	(hl),a
	inc	hl
	ld	a,(#%1 + 1)
	ld	(hl),a
} by {
	ld	bc,(#%1)
	ld	hl,#%2
	ld	(hl),c
	inc	hl
	ld	(hl),b
	ld	a,b
	; peephole z88dk-429a
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	ld	(hl),a
	inc	hl
	ld	a,(#%1 + 1)
	ld	(hl),a
} by {
	ld	de,(#%1)
	ld	hl,#%2
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	a,d
	; peephole z88dk-429b
} if notUsed('de')

replace restart {
	%4	a,%1
	ld	a,%2
	or	a,%3
} by {
	ld	a,%2
	or	a,%3
	; peephole z88dk-430a
} if notSame('a' %2)
// notVolatile

replace restart {
	ld	%1,(hl)
	ld	a,#0x00
	or	a,%1
} by {
	ld	a,(hl)
	ld	%1,a
	or	a,a
	; peephole z88dk-430b
}

replace restart {
	or	a,#0x00
} by {
	or	a,a
	; peephole z88dk-430c
}

replace restart {
	and	a,#0x00
} by {
	xor	a,a
	; peephole z88dk-430d
}

replace restart {
	sra	%1
	rr	%2
	ld	a,%2
} by {
	ld	a,%2
	sra	%1
	rra
	ld	%2,a
	; peephole z88dk-431
}

replace restart {
	ld	bc,%1
	ld	e,c
	ld	d,b
	dec	de
	ld	%2,de
} by {
	ld	bc,%1
	dec	bc
	ld	%2,bc
	inc	bc
	; peephole z88dk-432a
} if notUsed('de')

replace restart {
	ld	bc,%1
	ld	e,c
	ld	d,b
	inc	de
	ld	%2,de
} by {
	ld	bc,%1
	inc	bc
	ld	%2,bc
	dec	bc
	; peephole z88dk-432b
} if notUsed('de')


replace restart {
	ld	e,c
	ld	d,b
	inc	de
	inc	de
	ld	a,%1
	ld	(de),a
	ld	e,c
	ld	d,b
} by {
	ld	e,c
	ld	d,b
	inc	de
	inc	de
	ld	a,%1
	ld	(de),a
	dec	de
	dec	de
	; peephole z88dk-433b
}

replace restart {
	ld	e,c
	ld	d,b
	inc	de
	ld	a,%1
	ld	(de),a
	ld	e,c
	ld	d,b
} by {
	ld	e,c
	ld	d,b
	inc	de
	ld	a,%1
	ld	(de),a
	dec	de
	; peephole z88dk-433c
}

replace restart {
	ld	l,c
	ld	h,b
	inc	hl
	inc	hl
	ld	a,(hl)
	ld	%1,a
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	inc	hl
	inc	hl
	ld	a,(hl)
	ld	%1,a
	dec	hl
	dec	hl
	; peephole z88dk-433d
}

replace restart {
	ld	l,c
	ld	h,b
	inc	hl
	ld	a,(hl)
	ld	%1,a
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	inc	hl
	ld	a,(hl)
	ld	%1,a
	dec	hl
	; peephole z88dk-433e
}

replace restart {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	inc	bc
	inc	bc
	xor	a, a
	ld	(bc),a
	ld	c,%1 (%2)
	ld	b,%3 (%4)
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	inc	bc
	inc	bc
	xor	a, a
	ld	(bc),a
	dec	bc
	dec	bc
	; peephole z88dk-433f1
}

replace restart {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	inc	bc
	xor	a, a
	ld	(bc),a
	ld	c,%1 (%2)
	ld	b,%3 (%4)
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	inc	bc
	xor	a, a
	ld	(bc),a
	dec	bc
	; peephole z88dk-433f2
}

replace restart {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	xor	a, a
	ld	(bc),a
	ld	c,%1 (%2)
	ld	b,%3 (%4)
} by {
	ld	c,%1 (%2)
	ld	b,%3 (%4)
	xor	a, a
	ld	(bc),a
	; peephole z88dk-433f3
}

replace restart {
	ld	c,l
	ld	b,h
	ld	e,%1
	ld	d,%2
	ld	l,c
	ld	h,b
} by {
	ld	c,l
	ld	b,h
	ld	e,%1
	ld	d,%2
	; peephole z88dk-434a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	e,%1 (%3)
	ld	d,%2
	ld	l,c
	ld	h,b
} by {
	ld	c,l
	ld	b,h
	ld	e,%1 (%3)
	ld	d,%2
	; peephole z88dk-434b
}

replace restart {
	ld	c,l
	ld	b,h
	ld	e,%1
	ld	d,%2 (%4)
	ld	l,c
	ld	h,b
} by {
	ld	c,l
	ld	b,h
	ld	e,%1
	ld	d,%2 (%4)
	; peephole z88dk-434c
}

replace restart {
	ld	c,l
	ld	b,h
	ld	e,%1 (%3)
	ld	d,%2 (%4)
	ld	l,c
	ld	h,b
} by {
	ld	c,l
	ld	b,h
	ld	e,%1 (%3)
	ld	d,%2 (%4)
	; peephole z88dk-434d
}

replace restart {
	ld	%1 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	%3,a
	inc	hl
	ld	a,(hl)
	; peephole z88dk-434e1
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	%1 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	c,a
	inc	hl
	ld	a,(hl)
	ld	%3,c
	; peephole z88dk-434e2
} if notUsed('c')

replace restart {
	ld	%1 (%2),a
	inc	hl
	ld	a,(hl)
	ld	%3,%1 (%2)
} by {
	ld	%1 (%2),a
	ld	e,a
	inc	hl
	ld	a,(hl)
	ld	%3,e
	; peephole z88dk-434e3
} if notUsed('e')

replace restart {
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	dec	hl
	ld	%1,(hl)
} by {
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	dec	hl
	; peephole z88dk-434f1
} if operandsNotRelated(%1 'hl')
// notVolatile

replace restart {
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	ld	%3,%4
	dec	hl
	ld	%1,(hl)
} by {
	ld	(hl),%1
	inc	hl
	ld	(hl),%2
	ld	%3,%4
	dec	hl
	; peephole z88dk-434f2
} if operandsNotRelated(%1 %3), operandsNotRelated(%3 'hl'), operandsNotRelated(%1 'hl')
// notVolatile

replace restart {
	ld	(hl),%1
	ld	%2,(hl)
} by {
	ld	(hl),%1
	ld	%2,%1
	; peephole z88dk-434g1
} if notSame(%1 %2)
// notVolatile

replace restart {
	ld	(hl),%1
	ld	%2,(hl)
} by {
	ld	(hl),%1
	; peephole z88dk-434g2
}
// notVolatile

replace restart {
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	dec	hl
	set	%1,b
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	c,(hl)
	inc	hl
	set	%1,(hl)
	ld	b,(hl)
	; peephole z88dk-434h1
}
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	set	%5,b
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	c,(hl)
	inc	hl
	set	%5,(hl)
	ld	b,(hl)
	; peephole z88dk-434h2
}
// notVolatile

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	c,(hl)
	inc	hl
	ld	a,(hl)
	and	a,%5
	ld	b,a
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	(hl),c
	inc	hl
	ld	(hl),b
} by {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ld	c,(hl)
	inc	hl
	ld	a,(hl)
	and	a,%5
	ld	(hl),a
	ld	b,a
	; peephole z88dk-434h3
}
// notVolatile

replace restart {
	ld	%2 (%3),a
	ld	a,%4 (%5)
	adc	a,%1
	ld	%6,%2 (%3)
} by {
	ld	%2 (%3),a
	ld	%6,a
	ld	a,%4 (%5)
	adc	a,%1
	; peephole z88dk-434i1
} if notSame(%1 %6), notSame(%6 'a')
// notVolatile

replace restart {
	ld	%2 (%3),a
	ld	a,%4 (%5)
	add	a,%1
	ld	%6,%2 (%3)
} by {
	ld	%2 (%3),a
	ld	%6,a
	ld	a,%4 (%5)
	add	a,%1
	; peephole z88dk-434i2
} if notSame(%1 %6), notSame(%6 'a')
// notVolatile

replace restart {
	ld	%2 (%3),a
	ld	a,%4 (%5)
	sub	a,%1
	ld	%6,%2 (%3)
} by {
	ld	%2 (%3),a
	ld	%6,a
	ld	a,%4 (%5)
	sub	a,%1
	; peephole z88dk-434i3
} if notSame(%1 %6), notSame(%6 'a')
// notVolatile

replace restart {
	ld	%2 (%3),a
	ld	a,%4 (%5)
	sbc	a,%1
	ld	%6,%2 (%3)
} by {
	ld	%2 (%3),a
	ld	%6,a
	ld	a,%4 (%5)
	sbc	a,%1
	; peephole z88dk-434i4
} if notSame(%1 %6), notSame(%6 'a')
// notVolatile

replace restart {
	ld	a,#<(%1)
	ld	hl,%3
	add	a, (hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%2
	ld	b,a
	ld	a,(bc)
	inc	a
	ld	(bc),a
	ld	a,#<(%1)
	add	a, (hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%2
	ld	b,a
} by {
	ld	a,#<(%1)
	ld	hl,%3
	add	a, (hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%2
	ld	b,a
	ld	a,(bc)
	inc	a
	ld	(bc),a
	; peephole z88dk-434j1
}
// notVolatile

replace restart {
	ld	c,e
	ld	b,d
	ex	de,hl
	call	%1
	push	bc
} by {
	ex	de,hl
	call	%1
	push	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-435a
} if notUsedFrom(%1 'hl')

replace restart {
	ld	hl,#%1
	call	%2
	ld	hl,#%1
} by {
	ld	hl,#%1
	call	%2
	; peephole z88dk-435b
} if notUsedFrom(%2 'hl')

replace restart {
	ld	a,(hl)
	set	%1,a
	ld	%2,a
} by {
	ld	%2,(hl)
	set	%1,%2
	; peephole z88dk-436a
} if notUsed('a'), canAssign(%2 '(hl)')

replace restart {
	ld	a,(hl)
	res	%1,a
	ld	%2,a
} by {
	ld	%2,(hl)
	res	%1,%2
	; peephole z88dk-436b
} if notUsed('a'), canAssign(%2 '(hl)')

replace restart {
	ld	%1,%2
	dec	%1
	ld	%2,%1
} by {
	dec	%2
	ld	%1,%2
	; peephole z88dk-437a
} if canAssign(%2 '(hl)')

replace restart {
	ld	%1,%2
	inc	%1
	ld	%2,%1
} by {
	inc	%2
	ld	%1,%2
	; peephole z88dk-437b
} if canAssign(%2 '(hl)')

replace restart {
	ld	%1,(hl)
	inc	%1
	ld	h,%2
	ld	l,%1
} by {
	ld	l,(hl)
	inc	l
	ld	%1,l
	ld	h,%2
	; peephole z88dk-437c
} if operandsNotRelated(%1 'hl'), notSame(%2 'l')

replace restart {
	ld	%1,(hl)
	dec	%1
	ld	h,%2
	ld	l,%1
} by {
	ld	l,(hl)
	dec	l
	ld	%1,l
	ld	h,%2
	; peephole z88dk-437d
} if operandsNotRelated(%1 'hl'), notSame(%2 'l')

replace restart {
	ld	%1,%2
	dec	%1
	ld	%3,%1
} by {
	ld	%3,%2
	dec	%3
	; peephole z88dk-437e
} if notUsed(%1), canAssign(%1 '(hl)'), canAssign(%2 '(hl)'), canAssign(%3 '(hl)')

replace restart {
	ld	%1,%2
	inc	%1
	ld	%3,%1
} by {
	ld	%3,%2
	inc	%3
	; peephole z88dk-437f
} if notUsed(%1), canAssign(%1 '(hl)'), canAssign(%2 '(hl)'), canAssign(%3 '(hl)')

replace restart {
	ld	a,%1
	srl	a
	ld	%2,a
} by {
	ld	%2,%1
	srl	%2
	; peephole z88dk-437g
} if notUsed('a'), canAssign(%2 '(hl)'), canAssign(%1 '(hl)')

replace restart {
	ld	hl,#%1 + 2
	adc	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%1 + 3
} by {
	ld	hl,#%1 + 2
	adc	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	; peephole z88dk-438a
}

replace restart {
	ld	hl,#%1 + 1
	adc	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%1 + 2
} by {
	ld	hl,#%1 + 1
	adc	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	; peephole z88dk-438b
}

replace restart {
	ld	hl,#%1
	add	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%1 + 1
} by {
	ld	hl,#%1
	add	a, (hl)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	; peephole z88dk-438c
}

replace restart {
	inc	hl
	ld	%1,(hl)
	dec	hl
	ld	l,(hl)
	ld	h,%1
} by {
	ld	%1,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,%1
	ld	%1,h
	; peephole z88dk-439
}

replace restart {
	ld	%1 (%2),a
	sub	a,%3
	ld	a,%4
	rla
	ld	%1 (%2),a
} by {
	sub	a,%3
	ld	a,%4
	rla
	ld	%1 (%2),a
	; peephole z88dk-440a
}
// notVolatile

replace restart {
	ld	(%1),de
	ld	hl,%1
	ld	e,(hl)
} by {
	ld	(%1),de
	ld	hl,%1
	; peephole z88dk-440b1
}
// if notVolatile

replace restart {
	ld	(%1 + %2),de
	ld	hl,%1 + %2
	ld	e,(hl)
} by {
	ld	(%1 + %2),de
	ld	hl,%1 + %2
	; peephole z88dk-440b2
}
// if notVolatile

replace restart {
	ld	(%1),bc
	ld	hl,%1
	ld	c,(hl)
} by {
	ld	(%1),bc
	ld	hl,%1
	; peephole z88dk-440b3
}
// if notVolatile

replace restart {
	ld	(%1 + %2),bc
	ld	hl,%1 + %2
	ld	c,(hl)
} by {
	ld	(%1 + %2),bc
	ld	hl,%1 + %2
	; peephole z88dk-440b4
}
// if notVolatile

replace restart {
	xor	a,a
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x0000
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-441a
} if notUsed('a')

replace restart {
	xor	a,a
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	xor	a,a
	ld	l,a
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-441b
}

replace restart {
	xor	a,a
	ld	hl,#%1 + %2
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	ld	hl,#0x0000
	ld	(#%1 + %2),hl
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-441c
} if notUsed('a')

replace restart {
	xor	a,a
	ld	hl,#%1 + %2
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	xor	a,a
	ld	l,a
	ld	h,a
	ld	(#%1 + %2),hl
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-441d
}

replace restart {
	ld	hl,#%1
	ld	(hl),#0x%2
	inc	hl
	ld	(hl),#0x%3
} by {
	ld	hl,#0x%3%2
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-441e
}

replace restart {
	ld	hl,#%1 + %4
	ld	(hl),#0x%2
	inc	hl
	ld	(hl),#0x%3
} by {
	ld	hl,#0x%3%2
	ld	(#%1 + %4),hl
	ld	hl,#%1 + %4 + 1
	; peephole z88dk-441f
}

replace restart {
	ld	hl,(%1)
	ld	bc,#0x0004
	add	hl,bc
	ld	(hl),%2
	inc	hl
	ld	(hl),%3
	ld	bc,(%1)
	ld	hl,#0x0006
	add	hl,bc
} by {
	ld	bc,(%1)
	ld	hl,#0x0004
	add	hl,bc
	ld	(hl),%2
	inc	hl
	ld	(hl),%3
	inc	hl
	; peephole z88dk-442a
} if operandsNotRelated(%2 'bc'), operandsNotRelated(%3 'bc')

replace restart {
	ld	hl,(%1)
	inc	hl
	inc	hl
	inc	hl
	ld	(hl),%2
	ld	bc,(%1)
	ld	hl,#0x0004
	add	hl,bc
} by {
	ld	hl,(%1)
	ld	c,l
	ld	b,h
	inc	hl
	inc	hl
	inc	hl
	ld	(hl),%2
	inc	hl
	; peephole z88dk-442b  INCORRECT IF FLAGS USED
} if operandsNotRelated(%2 'bc')

replace restart {
	ld	bc,(%1)
	inc	bc
	inc	bc
	xor	a,a
	ld	(bc),a
	ld	hl,(%1)
} by {
	ld	hl,(%1)
	inc	hl
	inc	hl
	xor	a,a
	ld	(hl),a
	ld	c,l
	ld	b,h
	dec	hl
	dec	hl
	; peephole z88dk-442c
}
// notVolatile

replace restart {
	ld	hl,#%1
	ldi
	ld	a,(hl)
	ld	(de),a
	ld	hl,(#%1)
} by {
	ld	hl,(#%1)
	ex	de,hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ex	de,hl
	ld	a,h
	dec	bc
	; peephole z88dk-442d1
}

replace restart {
	ld	(%1),hl
	ex	de,hl
	ld	hl,#%2
	ldi
	ld	a,(hl)
	ld	(de),a
	ld	hl,(%1)
} by {
	ld	(%1),hl
	ld	de,(#%2)
	ld	(hl),e
	inc	hl
	ld	(hl),d
	ld	a,d
	ld	e,l
	ld	d,h
	dec	bc
	dec	hl
	; peephole z88dk-442d2
}
// notVolatile

replace restart {
	inc	de
	inc	de
	inc	de
	inc	de
	inc	de
} by {
	ld	hl,#0x0005
	add	hl,de
	ex	de,hl
	; peephole z88dk-443a  INCORRECT IF FLAGS USED
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	add	hl,de
	ex	de,hl
	inc	de
} by {
	ld	hl,#%1+1
	add	hl,de
	ex	de,hl
	; peephole z88dk-443b  INCORRECT IF FLAGS USED
} if notUsed('hl')

replace restart {
	inc	bc
	inc	bc
	inc	bc
	inc	bc
	inc	bc
} by {
	ld	hl,#0x0005
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-443c  INCORRECT IF FLAGS USED
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	add	hl,bc
	ld	c,l
	ld	b,h
	inc	bc
} by {
	ld	hl,#%1+1
	add	hl,bc
	ld	c,l
	ld	b,h
	; peephole z88dk-443d  INCORRECT IF FLAGS USED
} if notUsed('hl')

replace restart {
	ld	(hl),#%1
	ld	%2,#%1
} by {
	ld	%2,#%1
	ld	(hl),%2
	; peephole z88dk-444
} if canAssign(%2 '(hl)'), operandsNotRelated(%2 'hl')

replace restart {
	push	%1
	ld	sp,%2
} by {
	ld	sp,%2
	; peephole z88dk-445a
}

replace restart {
	pop	%1
	ld	sp,%2
} by {
	ld	sp,%2
	; peephole z88dk-445b
} if notSame(%1 %2), notUsed(%1)

replace restart {
	ld	hl,#%1
	ld	(hl),%2
	inc	hl
	ld	(hl),%3
} by {
	ld	l,%2
	ld	h,%3
	ld	(#%1),hl
	; peephole z88dk-446
} if notUsed('hl'), operandsNotRelated(%2 'hl'), operandsNotRelated(%3 'hl')

replace restart {
	ld	c,%1 (%2)
	ld	b,%3
	ld	l,c
	ld	h,b
} by {
	ld	l,%1 (%2)
	ld	h,%3
	ld	c,l
	ld	b,h
	; peephole z88dk-447
} if notSame(%3 'l')

replace restart {
	ld	a,(%2)
	res	%1,a
	ld	(%2),a
} by {
	ld	hl,%2
	res	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448a
} if notUsed('hl'), operandsNotRelated(%2 'bc'), operandsNotRelated(%2 'de'), operandsNotRelated(%2 'hl')

replace restart {
	ld	a,(%2)
	set	%1,a
	ld	(%2),a
} by {
	ld	hl,%2
	set	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448b
} if notUsed('hl'), operandsNotRelated(%2 'bc'), operandsNotRelated(%2 'de'), operandsNotRelated(%2 'hl')

replace restart {
	ld	a,(%2)
	bit	%1,a
	ld	(%2),a
} by {
	ld	hl,%2
	bit	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448c
} if notUsed('hl'), operandsNotRelated(%2 'bc'), operandsNotRelated(%2 'de'), operandsNotRelated(%2 'hl')

replace restart {
	ld	a,(%2 + %3)
	res	%1,a
	ld	(%2 + %3),a
} by {
	ld	hl,%2 + %3
	res	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448d
} if notUsed('hl')

replace restart {
	ld	a,(%2 + %3)
	set	%1,a
	ld	(%2 + %3),a
} by {
	ld	hl,%2 + %3
	set	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448e
} if notUsed('hl')

replace restart {
	ld	a,(%2 + %3)
	bit	%1,a
	ld	(%2 + %3),a
} by {
	ld	hl,%2 + %3
	bit	%1,(hl)
	ld	a,(hl)
	; peephole z88dk-448f
} if notUsed('hl')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	inc	hl
	; peephole z88dk-449a
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,b
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	; peephole z88dk-449b
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,e
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	; peephole z88dk-449c
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	inc	hl
	inc	hl
	res	%1,(hl)
	; peephole z88dk-449d
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,b
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	inc	hl
	; peephole z88dk-449e
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,e
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	res	%2,(hl)
	inc	hl
	; peephole z88dk-449f
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	inc	hl
	res	%2,(hl)
	; peephole z88dk-449g
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,b
	res	%2,e
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	; peephole z88dk-449h
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,b
	res	%2,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	res	%2,(hl)
	; peephole z88dk-449i
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,e
	res	%2,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	; peephole z88dk-449j
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,b
	res	%3,e
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	res	%3,(hl)
	inc	hl
	; peephole z88dk-449k
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,e
	res	%3,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	inc	hl
	res	%2,(hl)
	inc	hl
	res	%3,(hl)
	; peephole z88dk-449l
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,b
	res	%3,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	inc	hl
	res	%3,(hl)
	; peephole z88dk-449l
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,b
	res	%2,e
	res	%3,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	inc	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	res	%3,(hl)
	; peephole z88dk-449m
} if notUsed('bc'), notUsed('de')

replace restart {
	push	hl
	ld	c,(hl)
	inc	hl
	ld	b,(hl)
	inc	hl
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	res	%1,c
	res	%2,b
	res	%3,e
	res	%4,d
	pop	hl
	push	hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	inc	hl
	ld	(hl),e
	inc	hl
	ld	(hl),d
} by {
	push	hl
	res	%1,(hl)
	inc	hl
	res	%2,(hl)
	inc	hl
	res	%3,(hl)
	inc	hl
	res	%4,(hl)
	; peephole z88dk-449n
} if notUsed('bc'), notUsed('de')

replace restart {
	add	a,#0x00
} by {
	or	a,a
	; peephole z88dk-450a
}

replace restart {
	sub	a,#0x00
} by {
	or	a,a
	; peephole z88dk-450b
}

replace restart {
	pop	bc
	ld	l,c
	ld	h,b
} by {
	pop	hl
	; peephole z88dk-451a
} if notUsed('bc')

replace restart {
	pop	bc
	ld	%1,%2
	ld	l,c
	ld	h,b
} by {
	pop	hl
	ld	%1,%2
	; peephole z88dk-451b
} if notUsed('bc'), operandsNotRelated(%1 'bc'), operandsNotRelated(%1 'hl'), operandsNotRelated(%2 'bc')

replace restart {
	pop	bc
	ld	%1,%2 + %3
	ld	l,c
	ld	h,b
} by {
	pop	hl
	ld	%1,%2 + %3
	; peephole z88dk-451c
} if notUsed('bc'), operandsNotRelated(%1 'bc'), operandsNotRelated(%1 'hl')
	
replace restart {
	ld	c,l
	ld	b,h
	ld	(hl),%1
	inc	bc
	ld	(bc),a
} by {
	ld	(hl),%1
	inc	hl
	ld	(hl),a
	dec	hl
	; peephole z88dk-452
} if notUsed('bc'), operandsNotRelated(%1 'bc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
} by {
	ld	bc,(#%1)
	ld	(hl),c
	inc	hl
	ld	(hl),b
	ld	a,b
	ld	hl,#%1 + 1
	; peephole z88dk-453
} if notUsed('bc')

replace restart {
	%1	bc
	sla	c
	rl	b
} by {
	ld	l,c
	ld	h,b
	%1	hl
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-454a
} if notUsed('hl')

replace restart {
	%1	de
	sla	e
	rl	d
} by {
	ld	l,e
	ld	h,d
	%1	hl
	add	hl,hl
	ld	e,l
	ld	d,h
	; peephole z88dk-454b
} if notUsed('hl')	

replace restart {
	ld	(#%1),hl
	inc	%2
	ld	hl,(#%1)
} by {
	ld	(#%1),hl
	inc	%2
	; peephole z88dk-455
} if operandsNotRelated(%2 'hl'), notVolatile(%1)

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	and	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	and	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	a,(#%2)
	and	a,l
	ld	l,a
	ld	a,(#%2 + 1)
	and	a,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-456a
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	or	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	or	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	a,(#%2)
	or	a,l
	ld	l,a
	ld	a,(#%2 + 1)
	or	a,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-456b
}

replace restart {
	ld	a,(#%1)
	ld	hl,#%2
	xor	a, (hl)
	ld	hl,#%1
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,#%2 + 1
	xor	a, (hl)
	ld	(#%1 + 1),a
} by {
	ld	hl,(#%1)
	ld	a,(#%2)
	xor	a,l
	ld	l,a
	ld	a,(#%2 + 1)
	xor	a,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%2 + 1
	; peephole z88dk-456c
}

replace restart {
	ld	a,%1
	xor	a,%1
} by {
	xor	a,a
	; peephole z88dk-456d
} 
//if notVolatile(%1)
	
replace restart {
	ld	hl,#%1
	ld	a,(hl)
	cpl
	ld	c,a
	inc	hl
	ld	a,(hl)
	cpl
	ld	b,a
	ld	a,(#%2)
	xor	a, c
	ld	(#%1),a
	ld	a,(#%2 + 1)
	xor	a, b
	ld	(#%1 + 1),a
} by {
	ld	bc,(#%1)
	ld	hl,(#%2)
	ld	a,c
	cpl
	xor	a,l
	ld	l,a
	ld	a,b
	cpl
	xor	a,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-457d1
} if notUsed('bc')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	cpl
	ld	c,a
	inc	hl
	ld	a,(hl)
	cpl
	ld	b,a
	ld	a,(#%2)
	xor	a, c
	ld	(#%1),a
	ld	a,(#%2 + 1)
	xor	a, b
	ld	(#%1 + 1),a
} by {
	ld	bc,(#%1)
	ld	hl,(#%2)
	ld	a,c
	cpl
	ld	c,a
	xor	a,l
	ld	l,a
	ld	a,b
	cpl
	ld	b,a
	xor	a,h
	ld	h,a
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-457d2
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	add	hl,bc
	ld	de,#%2
	ldi
} by {
	ld	bc,(#%1)
	add	hl,bc
	ld	de,#%2
	ldi
	; peephole z88dk-458
} if notUsed('bc')

replace restart {
	ld	l, c
	ld	h, b
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	push	bc
} by {
	ld	l,c
	ld	h,b
	ld	e,(hl)
	inc	hl
	ld	d,(hl)
	dec	hl
	push	hl
	; peephole z88dk-459a
} if notUsed('bc'), notUsed('hl')

replace restart {
	%1	bc
	ld	l,c
	ld	h,b
} by {
	ld	l,c
	ld	h,b
	%1	hl
	; peephole z88dk-459b
} if notUsed('bc')

replace restart {
	ld	a,#0x00
	ld	(hl),a
	inc	hl
	ld	(hl),a
} by {
	xor	a,a
	ld	(hl),a
	inc	hl
	ld	(hl),a
	; peephole z88dk-459c
}

replace restart {
	ld	bc,(#%1)
	ld	hl,(#%2)
	push	hl
	push	bc
} by {
	ld	hl,(#%2)
	push	hl
	ld	hl,(#%1)
	push	hl
	; peephole z88dk-459d
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	b,h
	%1	e
} by {
	%1	e
	ld	b,h
	; peephole z88dk-459e1
}

replace restart {
	ld	b,h
	%1	d
} by {
	%1	d
	ld	b,h
	; peephole z88dk-459e2
}

replace restart {
	ld	c,l
	%1	e
} by {
	%1	e
	ld	c,l
	; peephole z88dk-459e3
}

replace restart {
	ld	c,l
	%1	d
} by {
	%1	d
	ld	c,l
	; peephole z88dk-459e4
}

replace restart {
	ld	b,h
	%1	a,c
} by {
	%1	a,c
	ld	b,h
	; peephole z88dk-459e5
}

replace restart {
	ld	b,h
	%1	a,b
} by {
	%1	a,h
	ld	b,h
	; peephole z88dk-459e6
}

replace	restart {
	ld	c,l
	%1	a,c
} by {
	%1	a,l
	ld	c,l
	; peephole z88dk-459e7
}

replace restart {
	ld	c,l
	%1	a,b
} by {
	%1	a,b
	ld	c,l
	; peephole z88dk-459e8
}
	
replace restart {
	ld	b,h
	ld	a,%1
} by {
	ld	a,%1
	ld	b,h
	; peephole z88dk-459e9
} if operandsNotRelated(%1 'b')

replace restart {
	ld	c,l
	ld	a,%1
} by {
	ld	a,%1
	ld	c,l
	; peephole z88dk-459e10
} if operandsNotRelated(%1 'c')

replace restart {
	ld	b,h
	%1	a,%2
} by {
	%1	a,%2
	ld	b,h
	; peephole z88dk-459e11
} if operandsNotRelated(%2 'b')

replace restart {
	ld	c,l
	%1	a,%2
} by {
	%1	a,%2
	ld	c,l
	; peephole z88dk-459e12
} if operandsNotRelated(%2 'c')

replace restart {
	ld	b,h
	rla
} by {
	rla
	ld	b,h
	; peephole z88dk-459e13
}

replace restart {
	ld	c,l
	rla
} by {
	rla
	ld	c,l
	; peephole z88dk-459e14
}

replace restart {
	ld	b,h
	ld	%1 (%2),%3
} by {
	ld	%1 (%2),%3
	ld	b,h
	; peephole z88dk-459e15
} if notSame(%3 'b')

replace restart {
	ld	c,l
	ld	%1 (%2),%3
} by {
	ld	%1 (%2),%3
	ld	c,l
	; peephole z88dk-459e16
} if notSame(%3 'c')

replace restart {
	ld	b,h
	ld	%3,%1 (%2)
} by {
	ld	%3,%1 (%2)
	ld	b,h
	; peephole z88dk-459e17a
} if notSame(%3 'b'), notSame(%3 'h')

replace restart {
	ld	c,l
	ld	%3,%1 (%2)
} by {
	ld	%3,%1 (%2)
	ld	c,l
	; peephole z88dk-459e18a
} if notSame(%3 'c'), notSame(%3 'l')

replace restart {
	ld	b,h
	add	%3,%1 (%2)
} by {
	add	%3,%1 (%2)
	ld	b,h
	; peephole z88dk-459e17b
} if notSame(%3 'b'), notSame(%3 'h')

replace restart {
	ld	c,l
	add	%3,%1 (%2)
} by {
	add	%3,%1 (%2)
	ld	c,l
	; peephole z88dk-459e18b
} if notSame(%3 'c'), notSame(%3 'l')

replace restart {
	ld	b,h
	sub	%3,%1 (%2)
} by {
	sub	%3,%1 (%2)
	ld	b,h
	; peephole z88dk-459e17c
} if notSame(%3 'b'), notSame(%3 'h')

replace restart {
	ld	c,l
	sub	%3,%1 (%2)
} by {
	sub	%3,%1 (%2)
	ld	c,l
	; peephole z88dk-459e18d
} if notSame(%3 'c'), notSame(%3 'l')

replace restart {
	ld	b,h
	adc	%3,%1 (%2)
} by {
	adc	%3,%1 (%2)
	ld	b,h
	; peephole z88dk-459e17e
} if notSame(%3 'b'), notSame(%3 'h')

replace restart {
	ld	c,l
	adc	%3,%1 (%2)
} by {
	adc	%3,%1 (%2)
	ld	c,l
	; peephole z88dk-459e18f
} if notSame(%3 'c'), notSame(%3 'l')

replace restart {
	ld	b,h
	sbc	%3,%1 (%2)
} by {
	sbc	%3,%1 (%2)
	ld	b,h
	; peephole z88dk-459e17g
} if notSame(%3 'b'), notSame(%3 'h')

replace restart {
	ld	c,l
	sbc	%3,%1 (%2)
} by {
	sbc	%3,%1 (%2)
	ld	c,l
	; peephole z88dk-459e18h
} if notSame(%3 'c'), notSame(%3 'l')

replace restart {
	ld	b,h
	ld	c,l
} by {
	ld	c,l
	ld	b,h
	; peephole z88dk-459e19
}

replace restart {
	ld	%1 (%2),#%9
	ld	%3 (%4),#%9
	ld	%5 (%6),#%9
	ld	%7 (%8),#%9
} by {
	ld	a,#%9
	ld	%1 (%2),a
	ld	%3 (%4),a
	ld	%5 (%6),a
	ld	%7 (%8),a
	; peephole z88dk-460a
} if notUsed('a')

replace restart {
	ld	%1 (%2),#%9
	ld	%3 (%4),#%9
	ld	%5 (%6),#%9
} by {
	ld	a,#%9
	ld	%1 (%2),a
	ld	%3 (%4),a
	ld	%5 (%6),a
	; peephole z88dk-460b
} if notUsed('a')

//replace restart {
//	ld	%1 (%2),#%9
//	ld	%3 (%4),#%9
//} by {
//	ld	a,#%9
//	ld	%1 (%2),a
//	ld	%3 (%4),a
//	; peephole z88dk-460c
//} if notUsed('a')

replace restart {
	ld	l,e
	ld	h,d
	%1	de
	ld	a,h
	or	a,l
} by {
	ld	a,d
	or	a,e
	ld	l,e
	ld	h,d
	%1	de
	; peephole z88dk-461a
}

replace restart {
	ld	l,c
	ld	h,b
	%1	bc
	ld	a,h
	or	a,l
} by {
	ld	a,b
	or	a,c
	ld	l,c
	ld	h,b
	%1	bc
	; peephole z88dk-461b
}

replace restart {
	ld	(#%1),bc
	ld	de,(#%1)
} by {
	ld	(#%1),bc
	ld	e,c
	ld	d,b
	; peephole z88dk-462a
}
// if notVolatile

replace restart {
	ld	(#%1),bc
	ld	hl,(#%1)
} by {
	ld	l,c
	ld	h,b
	ld	(#%1),hl
	; peephole z88dk-462b
}
// if notVolatile

replace restart {
	ld	(#%1),de
	ld	bc,(#%1)
} by {
	ld	(#%1),de
	ld	c,e
	ld	b,d
	; peephole z88dk-462c
}
// if notVolatile

replace restart {
	ld	(#%1),de
	ld	hl,(#%1)
} by {
	ld	l,e
	ld	h,d
	ld	(#%1),hl
	; peephole z88dk-462d
}
// if notVolatile

replace restart {
	ld	(#%1),%2
	ld	%2,(#%1)
} by {
	ld	(#%1),%2
	; peephole z88dk-462e
}
// if notVolatile

replace restart {
	ld	%1,#%2
	inc	%1
} by {
	ld	%1,#%2+1
	; peephole z88dk-463a
} if notSame(%1 '(hl)')

replace restart {
	ld	%1,#%2 + %3
	inc	%1
} by {
	ld	%1,#%2 + %3+1
	; peephole z88dk-463b
} if same(%1 'bc' 'de' 'hl')

replace restart {
	ld	%1,#%2
	dec	%1
} by {
	ld	%1,#%2-1
	; peephole z88dk-463c
} if notSame(%1 '(hl)')

replace restart {
	ld	%1,#%2 + %3
	dec	%1
} by {
	ld	%1,#%2 + %3-1
	; peephole z88dk-463d
} if notSame(%1 '(hl)')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	hl,(#%1 + %2-1)
	push	hl
	ld	a,h
	ld	hl,#%1 + %2-1
	; peephole z88dk-464a
}

replace restart {
	ld	hl,#%1 + %2
	ld	(hl),a
	push	af
	inc	sp
	dec	hl
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	(#%1 + %2),a
	ld	hl,(#%1 + %2-1)
	push	hl
	ld	a,h
	ld	hl,#%1 + %2-1
	; peephole z88dk-464b
}

replace restart {
	ld	hl,(#%1)
	ld	%2,%3
	ld	bc,(#%1)
} by {
	ld	hl,(#%1)
	ld	%2,%3
	ld	c,l
	ld	b,h
	; peephole z88dk-465a
} if operandsNotRelated('hl' %2)

replace restart {
	ld	hl,(#%1 + %4)
	ld	%2,%3
	ld	bc,(#%1 + %4)
} by {
	ld	hl,(#%1 + %4)
	ld	%2,%3
	ld	c,l
	ld	b,h
	; peephole z88dk-465b
} if operandsNotRelated('hl' %2)

replace restart {
	ld	bc,(%1)
	ld 	l,c
	ld	h,b
} by {
	ld	hl,(%1)
	ld	c,l
	ld	b,h
	; peephole z88dk-466a
}

replace restart {
	ld	de,(%1)
	ld	l,e
	ld	h,d
} by {
	ld	hl,(%1)
	ld	e,l
	ld	d,h
	; peephole z88dk-466b
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,c
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,b
	ld	(hl),a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	(#%1),hl
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-467a
}

replace restart {
	pop	bc
	ld	a,c
	sub	a, e
	ld	c,a
	ld	a,b
	sbc	a, d
	ld	b,a
} by {
	pop	hl
	xor	a,a
	sbc	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-467b
} if notUsed('hl')

replace restart {
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
} by {
	push	af
	ld	bc,#7
	add	hl,bc
	pop	af
	; peephole z88dk-468a1
} if notUsed('bc')

replace restart {
	push	af
	ld	bc,#%1
	add	hl,bc
	pop	af
	inc	hl
} by {
	push	af
	ld	bc,#%1+1
	add	hl,bc
	pop	af
	; peephole z88dk-468a2
}

replace restart {
	inc	hl
	push	af
	ld	bc,#%1
	add	hl,bc
	pop	af
} by {
	push	af
	ld	bc,#%1+1
	add	hl,bc
	pop	af
	; peephole z88dk-468a3
}

replace restart {
	push	af
	ld	bc,#%1
	add	hl,bc
	pop	af
	push	af
	ld	bc,#%2
	add	hl,bc
	pop	af
} by {
	push	af
	ld	bc,#%1+%2
	add	hl,bc
	pop	af
	; peephole z88dk-468a4
}

replace restart {
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
	inc	hl
} by {
	push	af
	ld	de,#7
	add	hl,de
	pop	af
	; peephole z88dk-468b1
} if notUsed('de')

replace restart {
	push	af
	ld	de,#%1
	add	hl,de
	pop	af
	inc	hl
} by {
	push	af
	ld	de,#%1+1
	add	hl,de
	pop	af
	; peephole z88dk-468b2
}

replace restart {
	inc	hl
	push	af
	ld	de,#%1
	add	hl,de
	pop	af
} by {
	push	af
	ld	de,#%1+1
	add	hl,de
	pop	af
	; peephole z88dk-468b3
}

replace restart {
	push	af
	ld	de,#%1
	add	hl,de
	pop	af
	push	af
	ld	de,#%2
	add	hl,de
	pop	af
} by {
	push	af
	ld	de,#%1+%2
	add	hl,de
	pop	af
	; peephole z88dk-468b4
}

replace restart {
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ldi
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	; peephole z88dk-469a
} if notUsed('bc')

replace restart {
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	inc	de
	ld	a,(de)
	inc	hl
	ld	(hl),a
} by {
	ldi
	inc	bc
	ld	a,(hl)
	ld	(de),a
	ex	de,hl
	; peephole z88dk-469b
}

replace restart {
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
} by {
	ld	e,c
	ld	d,b
	ld	a,(hl)
	ldi
	ldi
	ld	c,e
	ld	b,d
	; peephole z88dk-470a
} if notUsed('de')

replace restart {
	ld	c,e
	ld	b,d
	ld	a,(hl)
	ld	(bc),a
	inc	bc
	inc	hl
} by {
	ldi
	ld	c,e
	ld	b,d
	; peephole z88dk-470b
} if notUsed('de')

replace restart {
	ld	c,e
	ld	b,d
	ld	e,c
	ld	d,b
} by {
	ld	c,e
	ld	b,d
	; peephole z88dk-470c
}

replace restart {
	ld	c,e
	ld	b,d
	ld	a,(hl)
	ld	(bc),a
} by {
	ld	a,(hl)
	ld	(de),a
	ld	c,e
	ld	b,d
	; peephole z88dk-470d
}

replace restart {
	ld	%1,%2 (%6)
	ld	%3,%4 (%7)
	ld	%5,%2 (%6)
} by {
	ld	%1,%2 (%6)
	ld	%3,%4 (%7)
	ld	%5,%1
	; peephole z88dk-471a
} if notSame(%1 %3)

replace restart {
	ld	%1,%2 (%6)
	ld	%3,%4
	ld	%5,%2 (%6)
} by {
	ld	%1,%2 (%6)
	ld	%3,%4
	ld	%5,%1
	; peephole z88dk-471b
} if operandsNotRelated(%1 %3)

replace restart {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	c,l
	ld	l,%1 (%2)
	ld	b,h
	ld	h,%3 (%4)
} by {
	ld	%1 (%2),l
	ld	%3 (%4),h
	ld	c,l
	ld	b,h
	; peephole z88dk-471c
}
// if notVolatile

replace restart {
	ld	%3,l
	ld	hl,#%1
	ld	(hl),%3
	inc	hl
	ld	a,#0x%2
	ld	(hl),a
} by {
	ld	h,#0x%2
	ld	%3,l
	ld	a,h
	ld	(#%1),hl
	ld	hl,#%1 + 1
	; peephole z88dk-472a
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	(#%1),hl
	ld	hl,#%1
	or	a,(hl)
} by {
	ld	(#%1),hl
	or	a,l
	ld	hl,#%1
	; peephole z88dk-472b
}

replace restart {
	ld	(#%1),hl
	ld	hl,#%1 + 1
	or	a,(hl)
} by {
	ld	(#%1),hl
	or	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-472c
}

replace restart {
	ld	hl,#(%1 + %2)
	ld	(hl),%10
	ld	hl,#(%1 + %3)
	ld	(hl),%11
	ld	hl,#(%1 + %4)
	ld	(hl),%12
} by {
	ld	hl,#(%1 + %2)
	ld	(hl),%10
	inc	hl
	ld	(hl),%11
	inc	hl
	ld	(hl),%12
	; peephole z88dk-473a
} if inSequence('1' %2 %3 %4)

replace restart {
	ld	hl,#%1
	ld	(hl),%10
	ld	hl,#(%1 + 0x0001)
	ld	(hl),%11
} by {
	ld	hl,#%1
	ld	(hl),%10
	inc	hl
	ld	(hl),%11
	; peephole z88dk-473b
}

replace restart {
	ld	hl,#(%1 + %2)
	ld	(hl),%10
	ld	hl,#(%1 + %3)
	ld	(hl),%11
} by {
	ld	hl,#(%1 + %2)
	ld	(hl),%10
	inc	hl
	ld	(hl),%11
	; peephole z88dk-473c
} if inSequence('1' %2 %3)

replace restart {
	ld	c,l
	ld	b,h
	ld	(%1),bc
} by {
	ld	(%1),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-474a
}

replace restart {
	ld	c,l
	ld	b,h
	ld	(%1 + %2),bc
} by {
	ld	(%1 + %2),hl
	ld	c,l
	ld	b,h
	; peephole z88dk-474b
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	%5	a,#%6
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	bc,#%1
	add	hl,bc
	ld	a,(hl)
	ld	c,l
	ld	b,h
	%5	a,#%6
	ld	hl,#%2
	; peephole z88dk-475a1
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	c,a
	ld	a,#%4
	%5	a,c
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	bc,#%1
	add	hl,bc
	ld	c,(hl)
	ld	b,h
	ld	a,#%4
	%5	a,c
	ld	hl,#%2
	; peephole z88dk-475a2
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	c,a
	or	a,a
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	bc,#%1
	add	hl,bc
	ld	a,(hl)
	ld	c,a
	ld	b,h
	or	a,a
	ld	hl,#%2
	; peephole z88dk-475a3
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	bc,#%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-475b
} if notUsed('hl')

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a,(hl)
	ld	e,a
	ld	a,b
	adc	a,#%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	h,#%2
	add	hl,bc
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-475c
} if notUsed('hl')

replace restart {
	ld	a,c
	ex	de,hl
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,b
	adc	a,#%2
	ld	b,a
	ld	a,(bc)
} by {
	ex	de,hl
	ld	hl,(#%1)
	ld	h,#%2
	add	hl,bc
	ld	a,(hl)
	ld	c,l
	ld	b,h
	; peephole z88dk-475d1
} if notUsed('hl')

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a, (hl)
	ld	c,a
	ld	a,b
	adc	a,#%2
	ld	b,a
	ld	a,(bc)
} by {
	ld	hl,(#%1)
	ld	h,#%2
	add	hl,bc
	ld	a,(hl)
	ld	c,l
	ld	b,h
	; peephole z88dk-475d2
} if notUsed('hl')

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a,(hl)
	ld	e,a
	ld	a,b
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-475d3a
} if notUsed('hl')

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a,(hl)
	ld	e,a
	ld	a,b
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	hl,(#%1)
	add	hl,bc
	ld	e,l
	ld	d,h
	ld	hl,#%1 + 1
	; peephole z88dk-475d3b
} if notUsed('a')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	bc,#%1
	add	hl,bc
	ld	a,(hl)
	ld	c,l
	ld	b,h
	; peephole z88dk-475e1
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a,(hl)
	ld	e,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	d,a
	ld	a,(de)
} by {
	ld	e,(hl)
	ld	d,#%3
	ld	hl,#%1
	add	hl,de
	ld	a,(hl)
	ex	de,hl
	; peephole z88dk-475e2
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
} by {
	ld	c,(hl)
	ld	b,#%3
	ld	hl,#%1
	add	hl,bc
	ld	a,(hl)
	; peephole z88dk-475e3
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	a,c
	add	a,#0x%1
	ld	l,a
	ld	a,b
	adc	a,#0x%2
	ld	h,a
} by {
	ld	hl,#0x%2%1
	add	hl,bc
	ld	a,h
	; peephole z88dk-475e4
}

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a, (hl)
	ld	e,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	d,a
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	de,#%1
	add	hl,de
	ex	de,hl
	; peephole z88dk-475f1
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,#<(%1)
	ld	c,l
	ld	b,h
	ld	hl,#%2
	add	a, (hl)
	ld	e,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	d,a
} by {
	ld	c,l
	ld	b,h
	ld	hl,(#%2)
	ld	h,#%3
	ld	de,#%1
	add	hl,de
	ex	de,hl
	; peephole z88dk-475f2
} if notUsed('hl'), notUsed('a')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	c,a
	ld	b,#%4
	ld	e,(hl)
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	e,l
	ld	bc,#%1
	add	hl,bc
	ld	c,(hl)
	ld	b,#%4
	ld	a,c
	; peephole z88dk-475g1
} if notUsed('hl')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	b,a
	ld	e,(hl)
} by {
	ld	hl,(#%2)
	ld	h,#%3
	ld	e,l
	ld	bc,#%1
	add	hl,bc
	ld	c,l
	ld	b,(hl)
	ld	a,b
	; peephole z88dk-475g2
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	add	a,#<(%2)
	ld	c,a
	ld	a,#>(%2)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	c,a
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	bc,#%2
	add	hl,bc
	ld	c,(hl)
	ld	b,h
	ld	a,c
	; peephole z88dk-475h1
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	add	a,#<(%2)
	ld	c,a
	ld	a,#>(%2)
	adc	a,#%3
	ld	b,a
	ld	a,(bc)
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	bc,#%2
	add	hl,bc
	ld	c,l
	ld	b,(hl)
	ld	a,b
	; peephole z88dk-475h2
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	add	a,#<(%2)
	ld	e,a
	ld	a,#>(%2)
	adc	a,#%3
	ld	d,a
	ld	a,(de)
} by {
	ld	hl,(#%1)
	ld	h,#%3
	ld	de,#%2
	add	hl,de
	ld	a,(hl)
	ex	de,hl
	; peephole z88dk-475i
} if notUsed('hl')

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a,(hl)
	ld	c,a
	ld	a,d
	inc	hl
	adc	a,(hl)
	ld	b,a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-475j
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	%2	a,c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	h,a
	ld	l,c
} by {
	ld	b,d
	ld	hl,(#%1)
	%2	hl,bc
	ld	a,h
	ld	c,l
	; peephole z88dk-475k1
} if notUsed('b'), same(%2 'add' 'adc')

replace restart {
	ld	hl,#%1 + %3
	ld	a,(hl)
	%2	a,c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	h,a
	ld	l,c
} by {
	ld	b,d
	ld	hl,(#%1 + %3)
	%2	hl,bc
	ld	a,h
	ld	c,l
	; peephole z88dk-475k1b
} if notUsed('b'), same(%2 'add' 'adc')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	%2	a,c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	h,a
	ld	l,c
} by {
	ld	a,b
	ld	b,d
	ld	hl,(#%1)
	%2	hl,bc
	ld	b,a
	ld	a,h
	ld	c,l
	; peephole z88dk-475k2a
} if same(%2 'add' 'adc')

replace restart {
	ld	hl,#%1 + %3
	ld	a,(hl)
	%2	a,c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	h,a
	ld	l,c
} by {
	ld	a,b
	ld	b,d
	ld	hl,(#%1 + %3)
	%2	hl,bc
	ld	b,a
	ld	a,h
	ld	c,l
	; peephole z88dk-475k2b
} if same(%2 'add' 'adc')

replace restart {
	ld	a,l
	ld	b,h
	ld	hl,#%1
	%2	a,(hl)
	ld	e,a
	ld	a,b
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	b,h
	ld	de,(#%1)
	%2	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	ld	hl,#%1 + 1
	; peephole z88dk-475l1
} if same(%2 'add' 'adc')

replace restart {
	ld	a,l
	ld	b,h
	ld	hl,#%1 + %3
	%2	a,(hl)
	ld	e,a
	ld	a,b
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	b,h
	ld	de,(#%1 + %3)
	%2	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3 + 1
	; peephole z88dk-475l2
} if same(%2 'add' 'adc')

replace restart {
	ld	a,e
	ld	c,l
	ld	b,h
	ld	hl,#%1
	%2	a,(hl)
	ld	e,a
	ld	a,d
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	%2	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	ld	hl,#%1 + 1
	; peephole z88dk-475m1
}

replace restart {
	ld	a,e
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %3
	%2	a,(hl)
	ld	e,a
	ld	a,d
	inc	hl
	adc	a,(hl)
	ld	d,a
} by {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %3)
	%2	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3 + 1
	; peephole z88dk-475m2
}

replace restart {
	ld	(%1),a
	xor	a,%2
	ld	(%1),a
} by {
	xor	a,%2
	ld	(%1),a
	; peephole z88dk-476a
}
// if notVolatile

replace restart {
	ld	(%1),a
	or	a,%2
	ld	(%1),a
} by {
	or	a,%2
	ld	(%1),a
	; peephole z88dk-476b
}
// if notVolatile

replace restart {
	ld	(%1),a
	and	a,%2
	ld	(%1),a
} by {
	and	a,%2
	ld	(%1),a
	; peephole z88dk-476c
}
// if notVolatile

replace restart {
	ld	(%1),a
	set	%2,a
	ld	(%1),a
} by {
	set	%2,a
	ld	(%1),a
	; peephole z88dk-476d
}
// if notVolatile

replace restart {
	ld	(%1),a
	res	%2,a
	ld	(%1),a
} by {
	res	%2,a
	ld	(%1),a
	; peephole z88dk-476e
}
// if notVolatile

replace restart {
	xor	a,#%1
	xor	a,#%2
} by {
	xor	a,#(%1^%2)
	; peephole z88dk-477a1
}

replace restart {
	xor	a,#%1
	xor	a,#(%2)
} by {
	xor	a,#(%1^%2)
	; peephole z88dk-477a2
}

replace restart {
	xor	a,#(%1)
	xor	a,#%2
} by {
	xor	a,#(%1^%2)
	; peephole z88dk-477a3
}

replace restart {
	xor	a,#(%1)
	xor	a,#(%2)
} by {
	xor	a,#(%1^%2)
	; peephole z88dk-477a4
}

replace restart {
	or	a,#%1
	or	a,#%2
} by {
	or	a,#(%1|%2)
	; peephole z88dk-477b1
}

replace restart {
	or	a,#%1
	or	a,#(%2)
} by {
	or	a,#(%1|%2)
	; peephole z88dk-477b2
}

replace restart {
	or	a,#(%1)
	or	a,#%2
} by {
	or	a,#(%1|%2)
	; peephole z88dk-477b3
}

replace restart {
	or	a,#(%1)
	or	a,#(%2)
} by {
	or	a,#(%1|%2)
	; peephole z88dk-477b2
}

replace restart {
	and	a,#%1
	and	a,#%2
} by {
	and	a,#(%1&%2)
	; peephole z88dk-477c1
}

replace restart {
	and	a,#%1
	and	a,#(%2)
} by {
	and	a,#(%1&%2)
	; peephole z88dk-477c2
}

replace restart {
	and	a,#(%1)
	and	a,#%2
} by {
	and	a,#(%1&%2)
	; peephole z88dk-477c3
}

replace restart {
	and	a,#(%1)
	and	a,#(%2)
} by {
	and	a,#(%1&%2)
	; peephole z88dk-477c4
}

replace restart {
	push	%1
	ld	%2,(%3)
} by {
	ld	%2,(%3)
	push	%1
	; peephole z88dk-478a
} if operandsNotRelated(%1 %2)

replace restart {
	ld	hl,#%1
	%2	a,%3
} by {
	%2	a,%3
	ld	hl,#%1
	; peephole z88dk-478b1
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%1 + %5
	%2	a,%3
} by {
	%2	a,%3
	ld	hl,#%1 + %5
	; peephole z88dk-478b1
} if operandsNotRelated(%3 'hl')

replace restart {
	ld	%1,%2
	%3	a
} by {
	%3	a
	ld	%1,%2
	; peephole z88dk-478c
} if operandsNotRelated(%1 'a'), operandsNotRelated(%2 'a')

replace restart {
	ex	de,hl
	ld	a,e
	ld	(bc),a
	inc	bc
	ld	a,d
	ld	(bc),a
} by {
	ld	a,l
	ld	(bc),a
	inc	bc
	ld	a,h
	ld	(bc),a
	ex	de,hl
	; peephole z88dk-478d
}

replace restart {
	ld	a,(#%1)
	ld	c,a
	ld	b,#%2
	sla	c
	rl	b
} by {
	ld	hl,(#%1)
	ld	h,#%2
	add	hl,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-479a
} if notUsed('a'), notUsed('hl')	

replace restart {
	ld	a,(#%1)
	ld	e,a
	ld	d,#%2
	sla	e
	rl	d
} by {
	ld	hl,(#%1)
	ld	h,#%2
	add	hl,hl
	ld	e,l
	ld	d,h
	; peephole z88dk-479b
} if notUsed('a'), notUsed('hl')	

replace restart {
	ld	bc,#%1
	ld	de,#%2
	ld	a,e
	ld	(bc),a
	inc	bc
	ld	a,d
	ld	(bc),a
} by {
	ld	de,#%2
	ld	(#%1),de
	ld	bc,#%1 + 1
	; peephole z88dk-480a
}

replace restart {
	ld	de,#%1
	ld	(#%2),de
} by {
	ld	hl,#%1
	ld	(#%2),hl
	; peephole z88dk-480b1
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	bc,#%1
	ld	(#%2),bc
} by {
	ld	hl,#%1
	ld	(#%2),hl
	; peephole z88dk-480b2
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	hl,(#%1)
	ld	c,l
	ld	b,h
} by {
	ld	bc,(#%1)
	; peephole z88dk-480c1
} if notUsed('hl')

replace restart {
	ld	hl,(#%1)
	ld	e,l
	ld	d,h
} by {
	ld	de,(#%1)
	; peephole z88dk-480c2
} if notUsed('hl')

replace restart {
	ld	hl,(#%1)
	ex	de,hl
} by {
	ld	de,(#%1)
	; peephole z88dk-480c3
} if notUsed('hl')

replace restart {
	push	af
	inc	sp
	push	bc
	inc	sp
} by {
	ld	c,b
	ld	b,a
	push	bc
	; peephole z88dk-481a1
} if notUsed('bc')

replace restart {
	push	af
	inc	sp
	push	de
	inc	sp
} by {
	ld	e,d
	ld	d,a
	push	de
	; peephole z88dk-481a2
} if notUsed('de')

replace restart {
	push	af
	inc	sp
	push	hl
	inc	sp
} by {
	ld	l,h
	ld	h,a
	push	hl
	; peephole z88dk-481a3
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	hl,(#%1-1)
	ld	l,%2 (%3)
	push	hl
	; peephole z88dk-481b1
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	a,(#%1)
	ld	d,a
	ld	e,%2 (%3)
	push	de
	; peephole z88dk-481b2
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	a,(#%1)
	ld	b,a
	ld	c,%2 (%3)
	push	bc
	; peephole z88dk-481b3
} if notUsed('bc')

replace restart {
	push	de
	inc	sp
	push	bc
	inc	sp
} by {
	ld	e,b
	push	de
	; peephole z88dk-481c1
} if notUsed('e')

replace restart {
	push	de
	inc	sp
	push	hl
	inc	sp
} by {
	ld	e,h
	push	de
	; peephole z88dk-481c2
} if notUsed('e')

replace restart {
	push	bc
	inc	sp
	push	de
	inc	sp
} by {
	ld	c,d
	push	bc
	; peephole z88dk-481c3
} if notUsed('c')

replace restart {
	push	bc
	inc	sp
	push	hl
	inc	sp
} by {
	ld	c,h
	push	bc
	; peephole z88dk-481c4
} if notUsed('c')

replace restart {
	push	hl
	inc	sp
	push	bc
	inc	sp
} by {
	ld	l,b
	push	hl
	; peephole z88dk-481c5
} if notUsed('l')

replace restart {
	push	hl
	inc	sp
	push	de
	inc	sp
} by {
	ld	l,d
	push	hl
	; peephole z88dk-481c6
} if notUsed('l')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	hl,(#%2)
	ld	h,#%1
	push	hl
	; peephole z88dk-481d1
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	d,#%1
	ld	a,(#%2)
	ld	e,a
	push	de
	; peephole z88dk-481d2
} if notUsed('de')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	b,#%1
	ld	a,(#%2)
	ld	c,a
	push	bc
	; peephole z88dk-481d3
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	hl,(#%1 - 1)
	ld	a,(#%2)
	ld	l,a
	push	hl
	; peephole z88dk-481e1
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	de,(#%1 - 1)
	ld	a,(#%2)
	ld	e,a
	push	de
	; peephole z88dk-481e2
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	ld	a,(#%2)
	push	af
	inc	sp
} by {
	ld	bc,(#%1 - 1)
	ld	a,(#%2)
	ld	c,a
	push	bc
	; peephole z88dk-481e3
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	hl,(#%1 - 1)
	xor	a,a
	ld	l,a
	push	hl
	; peephole z88dk-481f1
} if notUsed('hl')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	de,(#%1 - 1)
	xor	a,a
	ld	e,a
	push	de
	; peephole z88dk-481f2
} if notUsed('de')

replace restart {
	ld	a,(#%1)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	bc,(#%1 - 1)
	xor	a,a
	ld	c,a
	push	bc
	; peephole z88dk-481f3
} if notUsed('bc')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	l,(hl)
	ld	h,#%1
	ld	a,h
	push	hl
	; peephole z88dk-481g1
} if notUsed('hl')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	e,(hl)
	ld	d,#%1
	ld	a,d
	push	de
	; peephole z88dk-481g2
} if notUsed('de')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	c,(hl)
	ld	b,#%1
	ld	a,b
	push	bc
	; peephole z88dk-481g3
} if notUsed('bc')

replace restart {
	ld	b,a
	push	bc
	inc	sp
} by {
	push	af
	inc	sp
	; peephole z88dk-481h1
} if notUsed('b')

replace restart {
	ld	d,a
	push	de
	inc	sp
} by {
	push	af
	inc	sp
	; peephole z88dk-481h2
} if notUsed('d')

replace restart {
	ld	h,a
	push	hl
	inc	sp
} by {
	push	af
	inc	sp
	; peephole z88dk-481h3
} if notUsed('h')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	h,#%1
	ld	l,%2 (%3)
	ld	a,l
	push	hl
	; peephole z88dk-481j1
} if notUsed('hl')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	d,#%1
	ld	e,%2 (%3)
	ld	a,e
	push	de
	; peephole z88dk-481j2
} if notUsed('de')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,%2 (%3)
	push	af
	inc	sp
} by {
	ld	b,#%1
	ld	c,%2 (%3)
	ld	a,c
	push	bc
	; peephole z88dk-481j3
} if notUsed('bc')

replace restart {
	push	de
	inc	sp
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	e,(hl)
	ld	a,e
	push	de
	; peephole z88dk-481k1
} if notUsed('e')

replace restart {
	push	bc
	inc	sp
	ld	a,(hl)
	push	af
	inc	sp
} by {
	ld	c,(hl)
	ld	a,c
	push	bc
	; peephole z88dk-481k2
} if notUsed('c')

replace restart {
	push	bc
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	c,%1 (%2)
	ld	a,c
	push	bc
	; peephole z88dk-481m1
} if notUsed('c')

replace restart {
	push	de
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	e,%1 (%2)
	ld	a,e
	push	de
	; peephole z88dk-481m2
} if notUsed('e')

replace restart {
	push	hl
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	l,%1 (%2)
	ld	a,l
	push	hl
	; peephole z88dk-481m3
} if notUsed('l')

replace restart {
	ld	a,%1 (%2)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	h,%1 (%2)
	xor	a,a
	ld	l,a
	push	hl
	; peephole z88dk-481n1
} if notUsed('hl')

replace restart {
	ld	a,%1 (%2)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	d,%1 (%2)
	xor	a,a
	ld	e,a
	push	de
	; peephole z88dk-481n2
} if notUsed('de')

replace restart {
	ld	a,%1 (%2)
	push	af
	inc	sp
	xor	a,a
	push	af
	inc	sp
} by {
	ld	b,%1 (%2)
	xor	a,a
	ld	c,a
	push	bc
	; peephole z88dk-481n3
} if notUsed('bc')

replace restart {
	ld	a,(hl)
	push	af
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	h,(hl)
	ld	l,%1 (%2)
	ld	a,l
	push	hl
	; peephole z88dk-481o1
} if notUsed('hl')

replace restart {
	ld	a,(hl)
	push	af
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	d,(hl)
	ld	e,%1 (%2)
	ld	a,e
	push	de
	; peephole z88dk-481o2
} if notUsed('de')

replace restart {
	ld	a,(hl)
	push	af
	inc	sp
	ld	a,%1 (%2)
	push	af
	inc	sp
} by {
	ld	b,(hl)
	ld	c,%1 (%2)
	ld	a,c
	push	bc
	; peephole z88dk-481o3
} if notUsed('bc')

replace restart {
	push	de
	inc	sp
	push	af
	inc	sp
} by {
	ld	e,a
	push	de
	; peephole z88dk-481p1
} if notUsed('e')

replace restart {
	push	bc
	inc	sp
	push	af
	inc	sp
} by {
	ld	c,a
	push	bc
	; peephole z88dk-481p2
} if notUsed('c')

replace restart {
	push	hl
	inc	sp
	push	af
	inc	sp
} by {
	ld	l,a
	push	hl
	; peephole z88dk-481p3
} if notUsed('l')

replace restart {
	push	af
	inc	sp
	ld	a,(#%1)
	push	af
	inc	sp
} by {
	ld	hl,(#%1)
	ld	h,a
	ld	a,l
	push	hl
	; peephole z88dk-481q1
} if notUsed('hl')

replace restart {
	push	af
	inc	sp
	ld	a,(#%1)
	push	af
	inc	sp
} by {
	ld	de,(#%1)
	ld	d,a
	ld	a,e
	push	de
	; peephole z88dk-481q2
} if notUsed('de')

replace restart {
	push	af
	inc	sp
	ld	a,(#%1)
	push	af
	inc	sp
} by {
	ld	bc,(#%1)
	ld	b,a
	ld	a,c
	push	bc
	; peephole z88dk-481q3
} if notUsed('bc')

replace restart {
	push	bc
	inc	sp
	ld	a,(#%1)
	push	af
	inc	sp
} by {
	ld	a,(#%1)
	ld	c,a
	push	bc
	; peephole z88dk-481r1
} if notUsed('c')

replace restart {
	push	bc
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	c,#%1
	ld	a,c
	push	bc
	; peephole z88dk-481r2a
} if notUsed('c')

replace restart {
	push	bc
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	l,#%1
	ld	h,b
	ld	a,l
	push	hl
	; peephole z88dk-481r2b
} if notUsed('hl')

replace restart {
	push	de
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	e,#%1
	ld	a,e
	push	de
	; peephole z88dk-481r3a
} if notUsed('e')

replace restart {
	push	de
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	l,#%1
	ld	h,d
	ld	a,l
	push	hl
	; peephole z88dk-481r3b
} if notUsed('hl')

replace restart {
	push	hl
	inc	sp
	ld	a,#%1
	push	af
	inc	sp
} by {
	ld	l,#%1
	ld	a,l
	push	hl
	; peephole z88dk-481r4
} if notUsed('l')

replace restart {
	ld	a,#%1
	push	af
	inc	sp
	ld	a,c
	push	af
	inc	sp
} by {
	ld	b,#%1
	push	bc
	ld	a,c
	; peephole z88dk-481r5
} if notUsed('b')

replace restart {
	cpl
} by {
	; peephole z88dk-482a
} if notUsed('a')

replace restart {
	ld	c,(hl)
	ld	b,#%1
	sla	c
	rl	b
	ld	hl,#%2
	add	hl,bc
} by {
	ld	l,(hl)
	ld	h,#%1
	add	hl,hl
	ld	bc,#%2
	add	hl,bc
	; peephole z88dk-483a
} if notUsed('bc')

replace restart {
	ld	(%1),hl
	ld	hl,%1
	ld	a,(hl)
	sub	a,#%2
	inc	hl
	ld	a,(hl)
	sbc	a,#%3
} by {
	ld	(%1),hl
	ld	a,l
	sub	a,#%2
	ld	a,h
	sbc	a,#%3
	ld	hl,#%1
	; peephole z88dk-483b
}

replace restart {
	inc	(hl)
	ld	%1,(hl)
} by {
	ld	%1,(hl)
	inc	%1
	ld	(hl),%1
	; peephole z88dk-484a
} if operandsNotRelated(%1 'hl')

replace restart {
	dec	(hl)
	ld	%1,(hl)
} by {
	ld	%1,(hl)
	dec	%1
	ld	(hl),%1
	; peephole z88dk-484b
} if operandsNotRelated(%1 'hl')

replace restart {
	ld	(hl),%1
	inc	%1
	ld	(hl),%1
} by {
	inc	%1
	ld	(hl),%1
	; peephole z88dk-484c1
}
// notVolatile

replace restart {
	ld	(hl),%1
	dec	%1
	ld	(hl),%1
} by {
	dec	%1
	ld	(hl),%1
	; peephole z88dk-484c2
}
// notVolatile

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%2)
	ld	h,%3
	ld	bc,#%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%2
	; peephole z88dk-485a1
} if operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,#<(%1 + %7)
	ld	hl,#%2
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1 + %7)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%2)
	ld	h,%3
	ld	bc,#%1+%7
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%2
	; peephole z88dk-485a2
} if operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,#<(%1)
	ld	hl,#%2 + %8
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%2+%8)
	ld	h,%3
	ld	bc,#%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%2+%8
	; peephole z88dk-485a3
} if operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,#<(%1 + %7)
	ld	hl,#%2 + %8
	add	a,(hl)
	ld	c,a
	ld	a,#>(%1 + %7)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%2+%8)
	ld	h,%3
	ld	bc,#%1+%7
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%2+%8
	; peephole z88dk-485a4
} if operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,(#%1)
	add	a,#<(%2)
	ld	c,a
	ld	a,#>(%2)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	h,%3
	ld	bc,#%2
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-485b1
} if notUsed('hl'), operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,(#%1)
	add	a,#<(%2 + %7)
	ld	c,a
	ld	a,#>(%2 + %7)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	h,%3
	ld	bc,#%2+%7
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-485b2
} if notUsed('hl'), operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,(#%1 + %8)
	add	a,#<(%2)
	ld	c,a
	ld	a,#>(%2)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%1+%8)
	ld	h,%3
	ld	bc,#%2
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-485b3
} if notUsed('hl'), operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	a,(#%1 + %8)
	add	a,#<(%2 + %7)
	ld	c,a
	ld	a,#>(%2 + %7)
	adc	a,%3
	ld	b,a
} by {
	ld	hl,(#%1+%8)
	ld	h,%3
	ld	bc,#%2+%7
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-485b4
} if notUsed('hl'), operandsNotRelated(%3 'a'), operandsNotRelated(%3 'c'), operandsNotRelated(%3 'hl')

replace restart {
	ld	c,l
	ld	b,h
	%1	%2,%3
} by {
	%1	%2,%3
	ld	c,l
	ld	b,h
	; peephole z88dk-485c1a
} if same(%1 'set' 'res'), operandsNotRelated(%3 'bc'), operandsNotRelated(%3 'hl')

replace restart {
	ld	c,l
	ld	b,h
	bit	%2,%3
} by {
	bit	%2,%3
	ld	c,l
	ld	b,h
	; peephole z88dk-485c1b
} if operandsNotRelated(%3 'bc')

replace restart {
	ld	hl,#%5
	%1	%2,%3
} by {
	%1	%2,%3
	ld	hl,#%5
	; peephole z88dk-485c2
} if same(%1 'set' 'res' 'bit'), operandsNotRelated(%3 'hl')

replace restart {
	ld	hl,#%5
	ld	(bc),a
} by {
	ld	(bc),a
	ld	hl,#%5
	; peephole z88dk-485c3
}

replace restart {
	ex	de,hl
	%1	%2,%3
} by {
	%1	%2,%3
	ex	de,hl
	; peephole z88dk-485c4
} if same(%1 'set' 'res' 'bit'), operandsNotRelated(%3 'de'), operandsNotRelated(%3 'hl')

replace restart {
	ld	bc,#%1
	ld	a,%2
	ld	(bc),a
} by {
	ld	hl,#%1
	ld	a,%2
	ld	(hl),a
	ld	c,l
	ld	b,h
	; peephole z88dk-485d1
} if notUsed('hl'), operandsNotRelated(%2 'bc'), operandsNotRelated(%2 'hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	%1,%2
} by {
	ld	%1,%2
	ld	c,l
	ld	b,h
	; peephole z88dk-485d2
} if operandsNotRelated(%1 'bc'), operandsNotRelated(%1 'hl'), operandsNotRelated(%2 'bc')

replace restart {
	ld	%1,a
	inc	%1
	inc	%1
} by {
	add	a,#0x02
	ld	%1,a
	; peephole z88dk-485e1
} if notUsed('a')

replace restart {
	add	a,#%2
	ld	%1,a
	inc	%1
} by {
	add	a,#%2+1
	ld	%1,a
	; peephole z88dk-485e2
} if notUsed('a')

replace restart {
	ld	%1,a
	dec	%1
	dec	%1
} by {
	add	a,#-0x02
	ld	%1,a
	; peephole z88dk-485e3
} if notUsed('a')

replace restart {
	add	a,#%2
	ld	%1,a
	dec	%1
} by {
	add	a,#%2-1
	ld	%1,a
	; peephole z88dk-485e4
} if notUsed('a')

//replace restart {
//	add	a,#%1
//	add	a,#%2
//} by {
//	add	a,#%1+#%2
//	; peephole z88dk-485e5
//}
// carry flag state not preserved

replace restart {
	ld	hl,#%1
	ld	h,(hl)
} by {
	ld	hl,(#%1-1)
	; peephole z88dk-485e6
} if notUsed('l')

replace restart {
	inc	a
	inc	a
} by {
	add	a,#0x02
	; peephole z88dk-485e7
}

replace restart {
	add	a,#%1
	inc	a
} by {
	add	a,#%1+1
	; peephole z88dk-485e8
}

replace restart {
	dec	a
	dec	a
} by {
	add	a,#-0x02
	; peephole z88dk-485e9
}

replace restart {
	add	a,#%1
	dec	a
} by {
	add	a,#%1-1
	; peephole z88dk-485e10
}

replace restart {
	ld	%1,%2 (%3)
	ld	%4,%5
	sla	%1
	rl	%4
} by {
	ld	l,%2 (%3)
	ld	h,%5
	add	hl,hl
	ld	%1,l
	ld	%4,h
	; peephole z88dk-485e11
} if notUsed('hl'), operandsNotRelated(%1 'hl'), operandsNotRelated(%4 'hl'), notSame(%5 'l')

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a,(hl)
	ld	c,a
	ld	a,d
	adc	a,%2
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	h,%2
	add	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-485e12
} if notUsed('hl'), notSame(%2 'a' 'c'), operandsNotRelated(%2 'hl')

replace restart {
	ld	a,e
	ld	hl,#%1
	add	a,(hl)
	ld	e,a
	ld	a,d
	adc	a,%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	h,%2
	add	hl,de
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-485e13
} if notUsed('hl'), notSame(%2 'a' 'e'), operandsNotRelated(%2 'hl')

replace restart {
	ld	a,c
	ld	hl,#%1
	add	a,(hl)
	ld	e,a
	ld	a,b
	adc	a,%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	h,%2
	add	hl,bc
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-485e14
} if notUsed('hl'), notSame(%2 'a' 'e'), operandsNotRelated(%2 'hl')

replace restart {
	ld 	a,e
	add	a,l
	ld	e,a
	ld	a,d
	adc	a,#0x%1
	ld	d,a
} by {
	ld	h,#0x%1
	add	hl,de
	ld	a,h
	ex	de,hl
	; peephole z88dk-485e15
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	adc	a,e
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	d,a
} by {
	ld	hl,(#%1 + %2)
	adc	hl,de
	ex	de,hl
	ld	a,d
	ld	hl,#%1 + %2+1
	; peephole z88dk-485e16
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,c
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a,#%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	b,#%2
	add	hl,bc
	ld	a,h
	ex	de,hl
	ld	hl,#%1 + 1
	; peephole z88dk-485e17a
} if notUsed('b')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,c
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a,#%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	a,b
	ld	b,#%2
	add	hl,bc
	ld	b,a
	ld	a,h
	ex	de,hl
	; peephole z88dk-485e17b
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a,c
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	sbc	a,b
	ld	(hl),a
} by {
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,bc
	ld	(#%1),hl
	; peephole z88dk-485e17c1
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	sub	a,e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	sbc	a,d
	ld	(hl),a
} by {
	ld	hl,(#%1)
	xor	a,a
	sbc	hl,de
	ld	(#%1),hl
	; peephole z88dk-485e17c2
} if notUsed('a'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#%4
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	c,%2 (%3)
	ld	b,#%4
	add	hl,bc
	ld	(#%1),hl
	; peephole z88dk-485e17d1
} if notUsed('a'), notUsed('bc'), notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,%2 (%3)
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#%4
	ld	(hl),a
} by {
	ld	hl,(#%1)
	ld	e,%2 (%3)
	ld	d,#%4
	add	hl,de
	ld	(#%1),hl
	; peephole z88dk-485e17d2
} if notUsed('a'), notUsed('de'), notUsed('hl')

replace restart {
	ld	a,(#%1 + %7)
	ld	c,l
	ld	b,h
	ld	hl,#%3 + %4
	sbc	a,(hl)
	ld	e,a
	ld	a,(#%1 + %8)
	inc	hl
	sbc	a,(hl)
	ld	d,a
} by {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %7)
	ld	de,(#%3 + %4)
	sbc	hl,de
	ex	de,hl
	ld	a,d
	ld	hl,#%3 + %4 + 1
	; peephole z88dk-485e17e1
} if inSequence('1' %7 %8)

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	adc	a,#0x%3
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%4
	ld	d,a
} by {
	ld	hl,(#%1 + %2)
	ld	de,#0x%4%3
	adc	hl,de
	ex	de,hl
	ld	a,d
	ld	hl,#%1 + %2 + 1
	; peephole z88dk-485e17f1
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,e
	ld	%2 (%3),a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	%4 (%5),a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	%2 (%3),l
	ld	%4 (%5),h
	ld	a,h
	ld	hl,#%1 + 1
	; peephole z88dk-485e17g1
}

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%4
	ld	(hl),a
} by {
	ld	hl,(#%1 + %2)
	ld	de,#0x%4%3
	adc	hl,de
	ld	(#%1 + %2),hl
	; peephole z88dk-485e17h1
} if notUsed('de'), notUsed('hl'), notUsed('a')

replace restart {
	ld	hl,#%1 + %2
	ld	a,(hl)
	adc	a,#0x%3
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%4
	ld	(hl),a
} by {
	ld	hl,(#%1 + %2)
	ld	bc,#0x%4%3
	adc	hl,bc
	ld	(#%1 + %2),hl
	; peephole z88dk-485e17h2
} if notUsed('bc'), notUsed('hl'), notUsed('a')

replace restart {
	ld	a,(#%1 + %2)
	adc	a,e
	ld	(#%3 + %4),a
	ld	a,(#%1 + %5)
	adc	a,d
	ld	(#%3 + %6),a
} by {
	ld	hl,(#%1 + %2)
	adc	hl,de
	ld	(#%3 + %4),hl
	ld	a,h
	; peephole z88dk-485e17h3
} if notUsed('hl'), inSequence('1' %2 %5), inSequence('1' %4 %6)

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,e
	ld	e,a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%2
	ld	d,a
} by {
	ld	hl,(#%1)
	ld	d,#0x%2
	add	hl,de
	ex	de,hl
	ld	a,d
	ld	hl,#%1 + 1
	; peephole z88dk-485e17h4
}

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,c
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,#0x%2
	ld	b,a
} by {
	ld	hl,(#%1)
	ld	b,#0x%2
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	a,h
	; peephole z88dk-485e17h5
} if notUsed('hl')

replace restart {
	ld	hl,#%1
	ld	a,(hl)
	add	a,e
	ld	c,a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	b,a
} by {
	ld	hl,(#%1)
	add	hl,de
	ld	a,h
	ld	c,l
	ld	b,h
	ld	hl,#%1 + 1
	; peephole z88dk-485e18
}

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,%1
	add	hl,bc
} by {
	ld	bc,%1
	add	hl,bc
	; peephole z88dk-485e19
} if notUsed('bc')

replace restart {
	ld	a,(#%1)
	ld	c,a
	ld	b,%2
	ld	hl,#%3
	add	hl,bc
} by {
	ld	hl,(#%1)
	ld	h,%2
	ld	bc,#%3
	add	hl,bc
	; peephole z88dk-486a
} if notSame(%2 'a'), notSame(%2 'c'), operandsNotRelated(%2 'hl'), notUsed('bc'), notUsed('a')

replace restart {
	%5	%1,(hl)
	%2	%3,(hl)
} by {
	ld	a,(hl)
	%5	%1,a
	ld	(hl),a
	%2	%3,(hl)
	; peephole z88dk-486b1
} if same(%2 'set' 'res' 'bit'), same(%5 'set' 'res' 'bit'), notUsed('a')

replace restart {
	ld	(hl),a
	%5	%2,(hl)
} by {
	%5	%2,a
	ld	(hl),a
	; peephole z88dk-486b2
} if same(%5 'set' 'res'), notUsed('a')

replace restart {
	ld	(hl),%3
	bit	%2,(hl)
} by {
	bit	%2,%3
	ld	(hl),%3
	; peephole z88dk-486b3
} if same(%3 'a' 'b' 'c' 'd' 'e' 'h' 'l')
// if notVolatile

replace restart {
	res	0,a
} by {
	and	a,#0xfe
	; peephole z88dk-487a0
}

replace restart {
	res	1,a
} by {
	and	a,#0xfd
	; peephole z88dk-487a1
}

replace restart {
	res	2,a
} by {
	and	a,#0xfb
	; peephole z88dk-487a2
}

replace restart {
	res	3,a
} by {
	and	a,#0xf7
	; peephole z88dk-487a3
}

replace restart {
	res	4,a
} by {
	and	a,#0xef
	; peephole z88dk-487a4
}

replace restart {
	res	5,a
} by {
	and	a,#0xdf
	; peephole z88dk-487a5
}

replace restart {
	res	6,a
} by {
	and	a,#0xbf
	; peephole z88dk-487a6
}

replace restart {
	res	7,a
} by {
	and	a,#0x7f
	; peephole z88dk-487a7
}

replace restart {
	set	0,a
} by {
	or	a,#0x01
	; peephole z88dk-487b0
}

replace restart {
	set	1,a
} by {
	or	a,#0x02
	; peephole z88dk-487b1
}

replace restart {
	set	2,a
} by {
	or	a,#0x04
	; peephole z88dk-487b2
}

replace restart {
	set	3,a
} by {
	or	a,#0x08
	; peephole z88dk-487b3
}

replace restart {
	set	4,a
} by {
	or	a,#0x10
	; peephole z88dk-487b4
}

replace restart {
	set	5,a
} by {
	or	a,#0x20
	; peephole z88dk-487b5
}

replace restart {
	set	6,a
} by {
	or	a,#0x40
	; peephole z88dk-487b6
}

replace restart {
	set	7,a
} by {
	or	a,#0x80
	; peephole z88dk-487b7
}

replace restart {
	push	bc
	push	de
	ex	de,hl
	pop	hl
	pop	bc
} by {
	ex	de,hl
	; peephole z88dk-488
}

replace restart {
	ld	a,(%1 + %6)
	ld	hl,%2 + %8
	adc	a,(hl)
	ld	hl,%1 + %6
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,%2 + %9
	adc	a,(hl)
	ld	(%1 + %7),a
} by {
	ld	hl,(%1 + %6)
	ld	bc,(%2 + %8)
	adc	hl,bc
	ld	(%1 + %6),hl
	ld	a,h
	ld	hl,%2 + %9
	; peephole z88dk-489a1
} if notUsed('bc'), inSequence('1' %6 %7), inSequence('1' %8 %9)

replace restart {
	ld	a,(%1 + %6)
	ld	hl,%2 + %8
	adc	a,(hl)
	ld	hl,%1 + %6
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,%2 + %9
	adc	a,(hl)
	ld	(%1 + %7),a
} by {
	ld	hl,(%1 + %6)
	ld	de,(%2 + %8)
	adc	hl,de
	ld	(%1 + %6),hl
	ld	a,h
	ld	hl,%2 + %9
	; peephole z88dk-489a2
} if notUsed('de'), inSequence('1' %6 %7), inSequence('1' %8 %9)

replace restart {
	ld	a,(%1 + %6)
	ld	hl,%2 + %8
	adc	a,(hl)
	ld	hl,%1 + %6
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	ld	hl,%2 + %9
	adc	a,(hl)
	ld	(%1 + %7),a
} by {
	push	bc
	ld	hl,(%1 + %6)
	ld	bc,(%2 + %8)
	adc	hl,bc
	pop	bc
	ld	(%1 + %6),hl
	ld	a,h
	ld	hl,%2 + %9
	; peephole z88dk-489a3
} if inSequence('1' %6 %7), inSequence('1' %8 %9)

replace restart {
	ld	hl,%1 + %2
	ld	a,(hl)
	adc	a,e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	(hl),a
} by {
	ld	hl,(%1 + %2)
	adc	hl,de
	ld	(%1 + %2),hl
	ld	a,h
	; peephole z88dk-489b1
} if notUsed('hl')

replace restart {
	ld	hl,%1 + %2
	ld	a,(hl)
	add	a,e
	ld	(hl),a
	inc	hl
	ld	a,(hl)
	adc	a,d
	ld	(hl),a
} by {
	ld	hl,(%1 + %2)
	add	hl,de
	ld	(%1 + %2),hl
	ld	a,h
	; peephole z88dk-489b2
} if notUsed('hl')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	ld	de,(#%2)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1)
	ld	bc,(#%2)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b3a
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %3)
	ld	de,(#%2)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1 + %3)
	ld	bc,(#%2)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b3b
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	ld	de,(#%2 + %4)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1)
	ld	bc,(#%2 + %4)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b3c
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %3)
	ld	de,(#%2 + %4)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1 + %3)
	ld	bc,(#%2 + %4)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b3d
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	ld	de,#%2
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ld	bc,#%2
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b4a
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %3
	ld	de,#%2
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3
	ld	bc,#%2
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b4b
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	ld	de,#%2 + %4
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ld	bc,#%2 + %4
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b4c
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %3
	ld	de,#%2 + %4
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3
	ld	bc,#%2 + %4
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b4d
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	ld	de,#%2
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1)
	ld	bc,#%2
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b5a
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %3)
	ld	de,#%2
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1 + %3)
	ld	bc,#%2
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b5b
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1)
	ld	de,#%2 + %4
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1)
	ld	bc,#%2 + %4
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b5c
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,(#%1 + %3)
	ld	de,#%2 + %4
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,(#%1 + %3)
	ld	bc,#%2 + %4
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b5d
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	ld	de,(#%2)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ld	bc,(#%2)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b6a
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %3
	ld	de,(#%2)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3
	ld	bc,(#%2)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b6b
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1
	ld	de,(#%2 + %4)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1
	ld	bc,(#%2 + %4)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b6c
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	c,l
	ld	b,h
	ld	hl,#%1 + %3
	ld	de,(#%2 + %4)
	%6	hl,de
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	ld	hl,#%1 + %3
	ld	bc,(#%2 + %4)
	%6	hl,bc
	ex	de,hl
	ld	c,l
	ld	b,h
	; peephole z88dk-489b6d
} if same(%6 'add' 'adc' 'sbc')

replace restart {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	%6 (ix),a
	ld	a,(%1 + 1)
	ld	hl,%2 + 1
	%10	a,(hl)
	ld	%7 (ix),a
	ld	a,(%1 + 2)
	ld	hl,%2 + 2
	%10	a,(hl)
	ld	%8 (ix),a
	ld	a,(%1 + 3)
	ld	hl,%2 + 3
	%10	a,(hl)
	ld	%9 (ix),a
} by {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	%6 (ix),a
	ld	a,(%1 + 1)
	inc	hl
	%10	a,(hl)
	ld	%7 (ix),a
	ld	a,(%1 + 2)
	inc	hl
	%10	a,(hl)
	ld	%8 (ix),a
	ld	a,(%1 + 3)
	inc	hl
	%10	a,(hl)
	ld	%9 (ix),a
	; peephole z88dk-489c1
} if same(%10 'or' 'and' 'xor')

replace restart {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	c,a
	ld	a,(%1 + 1)
	ld	hl,%2 + 1
	%10	a,(hl)
	ld	b,a
	ld	a,(%1 + 2)
	ld	hl,%2 + 2
	%10	a,(hl)
	ld	e,a
	ld	a,(%1 + 3)
	ld	hl,%2 + 3
	%10	a,(hl)
	ld	d,a
} by {
	ld	a,(%1)
	ld	hl,%2
	%10	a,(hl)
	ld	c,a
	ld	a,(%1 + 1)
	inc	hl
	%10	a,(hl)
	ld	b,a
	ld	a,(%1 + 2)
	inc	hl
	%10	a,(hl)
	ld	e,a
	ld	a,(%1 + 3)
	inc	hl
	%10	a,(hl)
	ld	d,a
	; peephole z88dk-489c2
} if same(%10 'or' 'and' 'xor')

replace restart {
	ld	a,c
	ld	hl,%1
	%10	a,(hl)
	ld	c,a
	ld	a,b
	inc	hl
	%10	a,(hl)
	ld	b,a
	ld	a,e
	inc	hl
	%10	a,(hl)
	ld	e,a
	ld	a,d
	inc	hl
	%10	a,(hl)
	ld	d,a
} by {
	ld	hl,(%1)
	ld	a,c
	%10	a,l
	ld	c,a
	ld	a,b
	%10	a,h
	ld	b,a
	ld	hl,(%1 + 2)
	ld	a,e
	%10	a,l
	ld	e,a
	ld	a,d
	%10	a,h
	ld	d,a
	ld	hl,%1 + 3
	; peephole z88dk-489d1
} if same(%10 'and' 'or' 'xor')

replace restart {
	ld	a,c
	%10	a,%6 (ix)
	ld	hl,%1
	ld	(hl),a
	ld	a,b
	%10	a,%7 (ix)
	inc	hl
	ld	(hl),a
	ld	a,e
	%10	a,%8 (ix)
	inc	hl
	ld	(hl),a
	ld	a,d
	%10	a,%9 (ix)
	inc	hl
	ld	(hl),a
} by {
	ld	a,c
	%10	a,%6 (ix)
	ld	l,a
	ld	a,b
	%10	a,%7 (ix)
	ld	h,a
	ld	(%1),hl
	ld	a,e
	%10	a,%8 (ix)
	ld	l,a
	ld	a,d
	%10	a,%9 (ix)
	ld	h,a
	ld	(%1 + 2),hl
	ld	hl,%1 + 3
	; peephole z88dk-489d2
} if same(%10 'and' 'or' 'xor')

replace restart {
	ld	a,c
	add	a,(hl)
	ld	c,a
	ld	a,b
	adc	a,#0x%1
	ld	b,a
} by {
	ld	l,(hl)
	ld	h,#0x%1
	add	hl,bc
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-490a1
} if notUsed('hl')

replace restart {
	ld	a,e
	add	a,(hl)
	ld	e,a
	ld	a,d
	adc	a,#0x%1
	ld	d,a
} by {
	ld	l,(hl)
	ld	h,#0x%1
	add	hl,de
	ex	de,hl
	ld	a,d
	; peephole z88dk-490a2
} if notUsed('hl')

replace restart
{
	ld	hl,#%1
	%2	%3,(hl)
	jp	%4,%5
	ld	hl,#%1
} by {
	ld	hl,#%1
	%2	%3,(hl)
	jp	%4,%5
	; peephole z88dk-491a1
} if same(%2 'bit' 'set' 'res')

replace restart {
	ld	hl,#%1
	%2	%3,(hl)
	jp	%4,%5
	%6	%7,(hl)
	jp	%8,%9
	ld	hl,#%1
} by {
	ld	hl,#%1
	%2	%3,(hl)
	jp	%4,%5
	%6	%7,(hl)
	jp	%8,%9
	; peephole z88dk-491a2
} if same(%2 'bit' 'set' 'res'), same(%6 'bit' 'set' 'res')

// multiplication by minus one

replace restart {
	ld	%1,l
	ld	%2,h
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
	add	hl,hl
	add	hl,%2%1
} by {
	ld	%1,l
	ld	%2,h
	ld	a,l
	cpl
	ld	l,a
	ld	a,h
	cpl
	ld	h,a
	inc	hl
	; peephole z88dk-492a1
} if notUsed('a')

replace restart {
	ld	a,l
	ld	l,h
	ld	h,a
	ld	a,l
	ld	l,h
	ld	h,a
} by {
	ld a,h
	; peephole z88dk-492b1
}

replace restart {
	ld	a,l
	ld	l,h
	ld	h,a
	ex	de,hl
} by {
	ex	de,hl
	ld	a,e
	ld	e,d
	ld	d,a
	; peephole z88dk-492b2
}

replace restart {
	ld	a,d
	ld	d,l
	ld	l,a
	ld	a,e
	ld	e,h
	ld	h,a
	ld	a,d
	ld	d,l
	ld	l,a
	ld	a,e
	ld	e,h
	ld	h,a
} by {
	ld	a,h
	; peephole z88dk-492b3
}

replace restart {
	ex	de,hl
	ld	de,#%1
	ex	de,hl
} by {
	ld	hl,#%1
	; peephole z88dk-492c1
}

replace restart {
	ex	de,hl
	ld	de,#%1 + %2
	ex	de,hl
} by {
	ld	hl,#%1 + %2
	; peephole z88dk-492c2
}

replace restart {
	ex	de,hl
	ld	hl,#%1
	ex	de,hl
} by {
	ld	de,#%1
	; peephole z88dk-492c3
}

replace restart {
	ex	de,hl
	ld	hl,#%1 + %2
	ex	de,hl
} by {
	ld	de,#%1 + %2
	; peephole z88dk-492c4
}

replace restart {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%7,%8 (%9)
	ld	%10,%11 (%12)
	ld	%2 (%3),%1
	ld	%5 (%6),%4
	ld	%8 (%9),%7
	ld	%11 (%12),%10
} by {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%7,%8 (%9)
	ld	%10,%11 (%12)
   ; peephole z88dk-492d1a
} if notSame(%1 %4 %7 %10), notSame(%4 %7 %10), notSame(%7 %10), notSame(%2 %5 %8 %11), notSame(%5 %8 %11), notSame(%8 %11)

replace restart {
	ld	%2 (%3),%1
	ld	%5 (%6),%4
	ld	%8 (%9),%7
	ld	%11 (%12),%10
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%7,%8 (%9)
	ld	%10,%11 (%12)
} by {
	ld	%2 (%3),%1
	ld	%5 (%6),%4
	ld	%8 (%9),%7
	ld	%11 (%12),%10
   ; peephole z88dk-492d1b
} if notSame(%1 %4 %7 %10), notSame(%4 %7 %10), notSame(%7 %10), notSame(%2 %5 %8 %11), notSame(%5 %8 %11), notSame(%8 %11)

replace restart {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	ld	%2 (%3),%1
	ld	%5 (%6),%4
} by {
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
	; peephole z88dk-492d2a
} if notSame(%1 %4), notSame(%2 %5)

replace restart {
	ld	%2 (%3),%1
	ld	%5 (%6),%4
	ld	%1,%2 (%3)
	ld	%4,%5 (%6)
} by {
	ld	%2 (%3),%1
	ld	%5 (%6),%4
	; peephole z88dk-492d2b
} if notSame(%1 %4), notSame(%2 %5)

replace restart {
	push	de
	pop	hl
} by {
	ld	l,e
	ld	h,d
	; peephole z88dk-493a1
}

replace restart {
	push	bc
	pop	hl
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-493a2
}

replace restart {
	push	bc
	pop	de
} by {
	ld	e,c
	ld	d,b
	; peephole z88dk-493a3
}

replace restart {
	push	de
	pop	bc
} by {
	ld	c,e
	ld	b,d
	; peephole z88dk-493a4
}

replace restart {
	push	hl
	pop	bc
} by {
	ld	c,l
	ld	b,h
	; peephole z88dk-493a5
}

replace restart {
	push	hl
	pop	de
} by {
	ld	e,l
	ld	d,h
	; peephole z88dk-493a6
}

replace restart {
	push	%1
	pop	%1
} by {
	; peephole z88dk-493a7
}

replace restart {
	ld	hl,#%1
	ld	l,(hl)
	ld	h,#%2
} by {
	ld	hl,(#%1)
	ld	h,#%2
	; peephole z88dk-494a1
}

replace restart {
	ld	hl,#%1 + %3
	ld	l,(hl)
	ld	h,#%2
} by {
	ld	hl,(#%1 + %3)
	ld	h,#%2
	; peephole z88dk-494a2
}

replace restart {
	ld	bc,(#%1)
	ld	d,b
	ld	hl,#%1
	ld	e,(hl)
} by {
	ld	bc,(#%1)
	ld	e,c
	ld	d,b
	ld	hl,#%1
	; peephole z88dk-494a3
}

replace restart {
	ld	l,c
	ld	h,b
	ld	a,d
	ld	d,l
	ld	l,a
	ld	a,e
	ld	e,h
	ld	h,a
} by {
	ld	a,d
	ld	d,c
	ld	l,a
	ld	a,e
	ld	e,b
	ld	h,a
	; peephole z88dk-494a4
}









replace restart {
	z88dk_sll hl,0x01+1
} by {
	add	hl,hl
	; peephole z88dk-500a
}

replace restart {
	z88dk_sll hl,0x02+1
} by {
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500b
}

replace restart {
	z88dk_sll hl,0x03+1
} by {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500c
}

replace restart {
	z88dk_sll hl,0x04+1
} by {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500d
}

replace restart {
	z88dk_sll hl,0x05+1
} by {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500e
}

replace restart {
	z88dk_sll hl,0x06+1
} by {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500f
}

replace restart {
	z88dk_sll hl,0x07+1
} by {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	; peephole z88dk-500g
}

replace restart {
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
} by {
	xor	a,a
	add	hl,hl
	rla
	ld	l,h
	ld	h,a
	; peephole z88dk-501f
} if notUsed('a')

replace restart {
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
} by {
	xor	a,a
	add	hl,hl
	rla
	add	hl,hl
	rla
	ld	l,h
	ld	h,a
	; peephole z88dk-501e
} if notUsed('a')

replace restart {
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
	srl	h
	rr	l
} by {
	xor	a,a
	add	hl,hl
	rla
	add	hl,hl
	rla
	add	hl,hl
	rla
	ld	l,h
	ld	h,a
	; peephole z88dk-501d
} if notUsed('a')

replace restart {
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
} by {
	rl	e
	rl	d
	sbc	a,a
	ld	e,d
	ld	d,a
	; peephole z88dk-502f
} if notUsed('a')

replace restart {
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
} by {
	ex	de,hl
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	ld	e,h
	ld	d,a
	; peephole z88dk-502e1
} if notUsed('a'), notUsed('hl')

replace restart {
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
} by {
	ex	de,hl
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	ex	de,hl
	ld	e,d
	ld	d,a
	; peephole z88dk-502e2
} if notUsed('a')

replace restart {
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
} by {
	ex	de,hl
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	add	hl,hl
	rla
	ld	e,h
	ld	d,a
	; peephole z88dk-502d1
} if notUsed('a'), notUsed('hl')

replace restart {
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
	sra	d
	rr	e
} by {
	ex	de,hl
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	add	hl,hl
	rla
	ex	de,hl
	ld	e,d
	ld	d,a
	; peephole z88dk-502d2
} if notUsed('a')

replace restart {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
} by {
	ld	h,l
	ld	l,#0x00
	; peephole z88dk-503a
}

replace restart {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
} by {
	xor	a,a
	srl	h
	rr	l
	rra
	ld	h,l
	ld	l,a
	; peephole z88dk-503b1
} if notUsed('a')

replace restart {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
} by {
	srl	h
	rr	l
	ld	h,l
	ld	l,0
	rr	l
	; peephole z88dk-503b2
}

replace restart {
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
	add	hl,hl
} by {
	xor	a,a
	srl	h
	rr	l
	rra
	srl	h
	rr	l
	rra
	ld	h,l
	ld	l,a
	; peephole z88dk-503c
} if notUsed('a')

replace restart {
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
} by {
	add	hl,hl
	sbc	a,a
	ld	l,h
	ld	h,a
	; peephole z88dk-504f
} if notUsed('a')

replace restart {
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
} by {
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	ld	l,h
	ld	h,a
	; peephole z88dk-504e
} if notUsed('a')

replace restart {
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
	sra	h
	rr	l
} by {
	add	hl,hl
	sbc	a,a
	add	hl,hl
	rla
	add	hl,hl
	rla
	ld	l,h
	ld	h,a
	; peephole z88dk-504d
} if notUsed('a')

replace restart {
	sra	%1
	rr	%2
	sra	%1
	rr	%2
	sra	%1
	rr	%2
} by {
	ld	a,%2
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	ld	%2,a
	; peephole z88dk-505a
} if notUsed('a')

replace restart {
	ld	%2,a
	sra	%1
	rr	%2
} by {
	sra	%1
	rra
	ld	%2,a
	; peephole z88dk-505b
} if notUsed('a')

replace restart {
	srl	%1
	rr	%2
	srl	%1
	rr	%2
	srl	%1
	rr	%2
} by {
	ld	a,%2
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	ld	%2,a
	; peephole z88dk-506a
} if notUsed('a')

replace restart {
	ld	%2,a
	srl	%1
	rr	%2
} by {
	srl	%1
	rra	
	ld	%2,a
	; peephole z88dk-506b
} if notUsed('a')

replace restart {
	sla	l
	rl	h
} by {
	add	hl,hl
	; peephole z88dk-507aa
}

replace restart {
	sla	%1
	rl	%2
	sla	%1
	rl	%2
	sla	%1
	rl	%2
} by {
	ld	a,%2
	sla	%1
	rla
	sla	%1
	rla
	sla	%1
	rla
	ld	%2,a
	; peephole z88dk-507a
} if notUsed('a')

replace restart {
	ld	%2,a
	sla	%1
	rl	%2
} by {
	sla	%1
	rla
	ld	%2,a
	; peephole z88dk-507b
} if notUsed('a')

















replace restart {
	ld	hl,#%1
	ld	de,#%2
} by {
	ld	de,#%2
	ld	hl,#%1
	; peephole z88dk-600a
}

replace restart {
	ld	hl,#%1 + %3
	ld	de,#%2
} by {
	ld	de,#%2
	ld	hl,#%1 + %3
	; peephole z88dk-600b
}

replace restart {
	ld	hl,#%1
	ld	de,(#%2)
} by {
	ld	de,(#%2)
	ld	hl,#%1
	; peephole z88dk-600c
}

replace restart {
	ld	hl,#%1 + %3
	ld	de,(#%2)
} by {
	ld	de,(#%2)
	ld	hl,#%1 + %3
	; peephole z88dk-600d
}

replace restart {
	ld	hl,#%1
	ld	de,(#%2 + %4)
} by {
	ld	de,(#%2 + %4)
	ld	hl,#%1
	; peephole z88dk-600e
}

replace restart {
	ld	hl,#%1 + %3
	ld	de,(#%2 + %4)
} by {
	ld	de,(#%2 + %4)
	ld	hl,#%1 + %3
	; peephole z88dk-600f
}

replace restart {
	ld	l,e
	ld	h,d
} by {
	ex	de,hl
	; peephole z88dk-601a
} if notUsed('de')

replace restart {
	ld	e,l
	ld	d,h
} by {
	ex	de,hl
	; peephole z88dk-601b
} if notUsed('hl')

replace restart {
	or	a,%1
	or	a,a
} by {
	or	a,%1
	; peephole z88dk-602a
}

replace restart {
	or	a,%1
	jp	%2,%3
	or	a,a
} by {
	or	a,%1
	jp	%2,%3
	; peephole z88dk-602b
}

replace restart {
	ex	de,hl
	ex	de,hl
} by {
	; peephole z88dk-603a1
}

replace restart {
	ex	de,hl
	%1	a,a
	ex	de,hl
} by {
	%1	a,a
	; peephole z88dk-603a2
}

replace restart {
	ex	de,hl
} by {
	; peephole z88dk-603b
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	l,e
	ld	h,d
} by {
	ld	e,l
	ld	d,h
	; peephole z88dk-603c
}

replace restart {
	ld	l,e
	ld	h,d
	ex	de,hl
} by {
	ld	l,e
	ld	h,d
	; peephole z88dk-603d
}

replace restart {
	ld	e,l
	ld	d,h
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	; peephole z88dk-603e
}

replace restart {
	ld	l,e
	ld	h,d
} by {
	ex	de,hl
	; peephole z88dk-603f
} if notUsed('de')

replace restart {
	ld	h,d
	ld	l,e
} by {
	ex	de,hl
	; peephole z88dk-603g
} if notUsed('de')

replace restart {
	ld	e,l
	ld	d,h
} by {
	ex	de,hl
	; peephole z88dk-603h
} if notUsed('hl')

replace restart {
	ld	d,h
	ld	e,l
} by {
	ex	de,hl
	; peephole z88dk-603i
} if notUsed('hl')

replace restart {
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-603j
} if notUsed('de')

replace restart {
	ld	de,%1
	ld	hl,%2
	ex	de,hl
} by {
	ld	de,%2
	ld	hl,%1
	; peephole z88dk-603k1
}

replace restart {
	ld	de,%1 + %3
	ld	hl,%2
	ex	de,hl
} by {
	ld	de,%2
	ld	hl,%1 + %3
	; peephole z88dk-603k2
}

replace restart {
	ld	de,%1
	ld	hl,%2 + %4
	ex	de,hl
} by {
	ld	de,%2 + %4
	ld	hl,%1
	; peephole z88dk-603k3
}

replace restart {
	ld	de,%1 + %3
	ld	hl,%2 + %4
	ex	de,hl
} by {
	ld	de,%2 + %4
	ld	hl,%1 + %3
	; peephole z88dk-603k4
}

replace restart {
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	%5	a
	ex	de,hl
} by {
	ex	de,hl
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	%5	a
	; peephole z88dk-603l
}

replace restart {
	ex	de,hl
	ld	a,%1
} by {
	ld	a,%1
	ex	de,hl
	; peephole z88dk-603m
} if operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ex	de,hl
	%1	de
	ld	(de),a
} by {
	%1	hl
	ld	(hl),a
	ex	de,hl
	; peephole z88dk-603n
}

replace restart {
	ld	%1,#%2 + 1
	dec	%1
} by {
	ld	%1,#%2
	; peephole z88dk-604a
}

replace restart {
	ld	%1,#%2 - 1
	inc	%1
} by {
	ld	%1,#%2
	; peephole z88dk-604b
}

replace restart {
	ex	de,hl
	ld	a,(de)
} by {
	ld	a,(hl)
	ex	de,hl
	; peephole z88dk-605a
}

replace restart {
	inc	de
	ex	de,hl
} by {
	ex	de,hl
	inc	hl
	; peephole z88dk-605b
}

replace restart {
	dec	de
	ex	de,hl
} by {
	ex	de,hl
	dec	hl
	; peephole z88dk-605c
}

replace restart {
	inc	hl
	ex	de,hl
} by {
	ex	de,hl
	inc	de
	; peephole z88dk-605d
}

replace restart {
	dec	hl
	ex	de,hl
} by {
	ex	de,hl
	dec	de
	; peephole z88dk-605e
}

replace restart {
	ex	de,hl
	push	hl
} by {
	push	de
	ex	de,hl
	; peephole z88dk-605f
}

replace restart {
	ex	de,hl
	push	de
} by {
	push	hl
	ex	de,hl
	; peephole z88dk-605g
}

replace restart {
	ex	de,hl
	ld	(%1 + %2),de
} by {
	ld	(%1 + %2),hl
	ex	de,hl
	; peephole z88dk-605h
}

replace restart {
	ex	de,hl
	ld	(%1),de
} by {
	ld	(%1),hl
	ex	de,hl
	; peephole z88dk-605i
}

replace restart {
	ex	de,hl
	ld	(%1),bc
	ld	(%2),de
} by {
	ld	(%1),bc
	ld	(%2),hl
	ex	de,hl
	; peephole z88dk-605j
}

replace restart {
	ex	de,hl
	ld	(%1),bc
	ld	(%2 + %4),de
} by {
	ld	(%1),bc
	ld	(%2 + %4),hl
	ex	de,hl
	; peephole z88dk-605k
}

replace restart {
	ex	de,hl
	ld	(%1 + %3),bc
	ld	(%2 + %4),de
} by {
	ld	(%1 + %3),bc
	ld	(%2 + %4),hl
	ex	de,hl
	; peephole z88dk-605l
}

replace restart {
	ex	de,hl
	ld	(%1 + %3),bc
	ld	(%2 + %4 + %6),de
} by {
	ld	(%1 + %3),bc
	ld	(%2 + %4 + %6),hl
	ex	de,hl
	; peephole z88dk-605m
}

replace restart {
	ex	de,hl
	ld	c,e
	ld	b,d
	ld	(%1),de
} by {
	ld	c,l
	ld	b,h
	ld	(%1),hl
	ex	de,hl
	; peephole z88dk-605n
}

replace restart {
	ld	hl,#%1
	ex	de,hl
} by {
	ex	de,hl
	ld	de,#%1
	; peephole z88dk-605o1
}

replace restart {
	ld	hl,#%1 + %2
	ex	de,hl
} by {
	ex	de,hl
	ld	de,#%1 + %2
	; peephole z88dk-605o2
}

replace restart {
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	ex	de,hl
} by {
	ex	de,hl
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	; peephole z88dk-605p1
}

replace restart {
	ld	e,%1 (%2)
	ld	d,%3 (%4)
	ex	de,hl
} by {
	ex	de,hl
	ld	l,%1 (%2)
	ld	h,%3 (%4)
	; peephole z88dk-605p2
}

replace restart {
	ex	de,hl
	ld	c,e
	ld	b,d
} by {
	ld	c,l
	ld	b,h
	; peephole z88dk-605q
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	ld	hl,(%1)
	xor	a,a
	ex	de,hl
} by {
	ld	de,(%1)
	xor	a,a
	; peephole z88dk-605r1
}

replace restart {
	ex	de,hl
	ld	hl,(%1 + %2)
	xor	a,a
	ex	de,hl
} by {
	ld	de,(%1 + %2)
	xor	a,a
	; peephole z88dk-605r1
}

replace restart {
	ld	(#%1 + %2),hl
	ld	hl,(#%3)
	ld	de,(#%1 + %2)
} by {
	ld	(#%1 + %2),hl
	ex	de,hl
	ld	hl,(#%3)
	; peephole z88dk-605s1
}

replace restart {
	ld	(#%1),hl
	ld	hl,(#%3)
	ld	de,(#%1)
} by {
	ld	(#%1),hl
	ex	de,hl
	ld	hl,(#%3)
	; peephole z88dk-605s2
}

replace restart {
	ld	(#%1 + %2),hl
	ld	hl,(#%3 + %4)
	ld	de,(#%1 + %2)
} by {
	ld	(#%1 + %2),hl
	ex	de,hl
	ld	hl,(#%3 + %4)
	; peephole z88dk-605s3
}

replace restart {
	ld	(#%1),hl
	ld	hl,(#%3 + %4)
	ld	de,(#%1)
} by {
	ld	(#%1),hl
	ex	de,hl
	ld	hl,(#%3 + %4)
	; peephole z88dk-605s4
}

replace restart {
	ld	e,l
	ld	d,h
	xor	a,a
	ex	de,hl
} by {
	ld	e,l
	ld	d,h
	xor	a,a
	; peephole z88dk-605t1
}

replace restart {
	ld	l,e
	ld	h,d
	xor	a,a
	ex	de,hl
} by {
	ld	l,e
	ld	h,d
	xor	a,a
	; peephole z88dk-605t2
}

replace restart {
	ex	de,hl
	xor	a,a
	ex	de,hl
} by {
	xor	a,a
	; peephole z88dk-605t3
}

replace restart {
	ld	l,e
	ld	h,d
	ex	de,hl
} by {
	; peephole z88dk-605u1
}

replace restart {
	ld	e,l
	ld	d,h
	ex	de,hl
} by {
	; peephole z88dk-605u2
}

replace restart {
	ld	e,c
	ld	d,b
	ex	de,hl
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-605u3
} if notUsed('de')

replace restart {
	ld	l,c
	ld	h,b
	ex	de,hl
} by {
	ld	e,c
	ld	d,b
	; peephole z88dk-605u3
} if notUsed('hl')

replace restart {
	ld	e,%2
	ld	d,#%1
	ex	de,hl
} by {
	ld	l,%2
	ld	h,#%1
	; peephole z88dk-605v
} if notUsed('de')

replace restart {
	push	bc
	ex	de,hl
	pop	bc
} by {
	ex	de,hl
	; peephole z88dk-605w
}

replace restart {
	ex	de,hl
	ld	d,%1
} by {
	ld	h,%1
	ex	de,hl
	; peephole z88dk-606v1
} if operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ex	de,hl
	ld	e,%1
} by {
	ld	l,%1
	ex	de,hl
	; peephole z88dk-606v2
} if operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ex	de,hl
	ld	h,%1
} by {
	ld	d,%1
	ex	de,hl
	; peephole z88dk-606v1
} if operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ex	de,hl
	ld	l,%1
} by {
	ld	e,%1
	ex	de,hl
	; peephole z88dk-606v2
} if operandsNotRelated(%1 'de'), operandsNotRelated(%1 'hl')

replace restart {
	ld	a,c
	ld	(de),a
	inc	de
	ld	a,b
	ld	(de),a
} by {
	ex	de,hl
	ld	(hl),c
	inc	hl
	ld	(hl),b
	ex	de,hl
	ld	a,b
	; peephole z88dk-606w
}

replace restart {
	ld	%1,%2
	ld	%2,%1
} by {
	ld	%1,%2
	; peephole z88dk-606a1
} if notSame(%1 %2)
// notVolatile

replace restart {
	ld	a,h
	ld	d,a
} by {
	ld	a,h
	ld	d,h
	; peephole z88dk-606a2
}
// more general slows peephole considerably

replace restart {
	ld	b,h
	ld	a,b
} by {
	ld	b,h
	ld	a,h
	; peephole z88dk-606a3
}

replace restart {
	ld	a,c
	ld	d,a
} by {
	ld	a,c
	ld	d,c
	; peephole z88dk-606a4
}

replace restart {
	ld	b,l
	ld	c,%1
	ld	e,b
} by {
	ld	b,l
	ld	c,%1
	ld	e,l
	; peephole z88dk-606a5
}

replace restart {
	ld	c,h
	ld	e,%1
	ld	a,c
} by {
	ld	c,h
	ld	e,%1
	ld	a,h
	; peephole z88dk-606a6
}

replace restart {
	ld	d,l
	ld	e,h
	ld	l,d
} by {
	ld	d,l
	ld	e,h
	; peephole z88dk-606b
}

replace restart {
	ld	d,l
	ld	e,h
	ld	a,e
	or	a,d
} by {
	ld	a,h
	or	a,l
	ld	d,l
	ld	e,h
	; peephole z88dk-606c
}

replace restart {
	ld	e,a
	ld	l,d
	ld	h,e
} by {
	ld	e,a
	ld	l,d
	ld	h,a
	; peephole z88dk-606d
}

replace restart {
	ld	%1,%2
	ld	a, %3
	or	a,%1
} by {
	ld	a, %3
	or	a,%2
	ld	%1,%2
	; peephole z88dk-606e
} if canAssign(%2 '(hl)'), notSame(%1 'a'), operandsNotRelated(%1 %3)

replace restart {
	ld	e,a
	ld	h,e
} by {
	ld	e,a
	ld	h,a
	; peephole z88dk-606f
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,(bc)
} by {
	ld	c,l
	ld	b,h
	ld	a,(hl)
	; peephole z88dk-606g
}

replace restart {
	ld	b,l
	ld	c,h
	ld	a,b
} by {
	ld	b,l
	ld	c,h
	ld	a,l
	; peephole z88dk-606h
}

replace restart {
	ld	c,h
	ld	a,c
} by {
	ld	c,h
	ld	a,h
	; peephole z88dk-606i
}

replace restart {
	ld	a,d
	ld	e,a
} by {
	ld	a,d
	ld	e,d
	; peephole z88dk-606j
}

replace restart {
	ld	b,a
	ld	l, c
	ld	h, b
} by {
	ld	b,a
	ld	l,c
	ld	h,a
	; peephole z88dk-606k
}

replace restart {
	ld	c,l
	ld	b,h
	ld	e, c
} by {
	ld	c,l
	ld	b,h
	ld	e,l
	; peephole z88dk-606l
}

replace restart {
	ld	a, h
	ld	e, l
	ld	d,a
} by {
	ld	a,h
	ld	e,l
	ld	d,h
	; peephole z88dk-606m
}

replace restart {
	ld	e,a
	ld	l,b
	ld	h,e
} by {
	ld	e,a
	ld	l,b
	ld	h,a
	; peephole z88dk-606n
}

replace restart {
	ld	a,d
	ld	b,a
} by {
	ld	a,d
	ld	b,d
	; peephole z88dk-606o
}

replace restart {
	ld	e,l
	ld	d,h
	ld	c,e
} by {
	ld	e,l
	ld	d,h
	ld	c,l
	; peephole z88dk-606p
}

replace restart {
	ld	d,h
	ld	c,l
	ld	b,d
} by {
	ld	d,h
	ld	c,l
	ld	b,h
	; peephole z88dk-606q
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,c
} by {
	ld	c,l
	ld	b,h
	ld	a,l
	; peephole z88dk-606r
}

replace restart {
	ld	l,a
	ld	c,l
} by {
	ld	l,a
	ld	c,a
	; peephole z88dk-606s
}

replace restart {
	ld	a,h
	ld	b,a
} by {
	ld	a,h
	ld	b,h
	; peephole z88dk-606t
}

replace restart {
	ld	l,a
	ld	c,a
	ld	a,h
	ld	b,h
	or	a,l
} by {
	ld	l,a
	ld	c,a
	ld	b,h
	or	a,h
	; peephole z88dk-606u1
}

replace restart {
	ld	b,h
	ld	e,l
	ld	d,b
} by {
	ld	b,h
	ld	e,l
	ld	d,h
	; peephole z88dk-606v
}

replace restart {
	ld	c,l
	ld	a,h
	ld	b,h
	or	a,c
} by {
	ld	c,l
	ld	a,h
	ld	b,h
	or	a,l
	; peephole z88dk-606w
}

replace restart {
	ld	a,b
	ld	c,a
} by {
	ld	a,b
	ld	c,b
	; peephole z88dk-606x1
}

replace restart {
	ld	a,h
	ld	c,a
} by {
	ld	a,h
	ld	c,h
	; peephole z88dk-606x2
}

replace restart {
	ld	c,l
	ld	e,c
} by {
	ld	c,l
	ld	e,l
	; peephole z88dk-606y1
}

replace restart {
	ld	b,l
	ld	c,b
} by {
	ld	b,l
	ld	c,l
	; peephole z88dk-606y2
}

replace restart {
	ld	c,l
	ld	a,c
} by {
	ld	c,l
	ld	a,l
	; peephole z88dk-606y3
}

replace restart {
	ld	c,l
	ld	b,h
	ld	a,d
	or	a, e
	or	a, b
	or	a,c
} by {
	ld	c,l
	ld	b,h
	ld	a,d
	or	a,e
	or	a,h
	or	a,l
	; peephole z88dk-606z
}

replace restart {
	ld	e,a
	ld	l,e
} by {
	ld	e,a
	ld	l,a
	; peephole z88dk-606aa
}

replace restart {
	ld	h,b
	ld	l,c
} by {
	ld	l,c
	ld	h,b
	; peephole z88dk-606ab
}

replace restart {
	ld	e,c
	ld	d,b
	ld	a,e
} by {
	ld	e,c
	ld	d,b
	ld	a,c
	; peephole z88dk-606ac
}

replace restart {
	ld	b,l
	ld	a,h
	ld	d,b
} by {
	ld	b,l
	ld	a,h
	ld	d,l
	; peephole z88dk-606ad0
}

replace restart {
	ld	a,h
	ld	d,l
	ld	e,a
} by {
	ld	a,h
	ld	d,l
	ld	e,h
	; peephole z88dk-606ae0
}

replace restart {
	ld	b,l
	ld	a,h
	ld	d,l
	ld	e,h
	or	a,b
} by {
	ld	b,l
	ld	a,h
	ld	d,l
	ld	e,h
	or	a,l
	; peephole z88dk-606af0
}

replace restart {
	ld	%1,#0x00
	xor	a,a
} by {
	xor	a,a
	ld	%1,a
	; peephole z88dk-606ag1
}

replace restart {
	ld	%1,#0x00
	ld	bc,#0x0000
} by {
	ld	bc,#0x0000
	ld	%1,c
	; peephole z88dk-606ag2
} if operandsNotRelated(%1 'bc')

replace restart {
	ld	%1,#0x00
	ld	de,#0x0000
} by {
	ld	de,#0x0000
	ld	%1,e
	; peephole z88dk-606ag3
} if operandsNotRelated(%1 'de')

replace restart {
	ld	%1,#0x00
	ld	hl,#0x0000
} by {
	ld	hl,#0x0000
	ld	%1,l
	; peephole z88dk-606ag4
} if operandsNotRelated(%1 'hl')

replace restart {
	xor	a,a
	ld	bc,#0x0000
} by {
	xor	a,a
	ld	c,a
	ld	b,a
	; peephole z88dk-606ag5
}

replace restart {
	xor	a,a
	ld	de,#0x0000
} by {
	xor	a,a
	ld	e,a
	ld	d,a
	; peephole z88dk-606ag6
}

replace restart {
	xor	a,a
	ld	hl,#0x0000
} by {
	xor	a,a
	ld	l,a
	ld	h,a
	; peephole z88dk-606ag7
}

replace restart {
	ld	%1,#0x0000
	ld	%2,%3
	xor	a,a
} by {
	xor	a,a
	ld	%1,#0x0000
	ld	%2,%3
	; peephole z88dk-606ag8
} if notSame(%2 'a'), notSame(%3 'a')

replace restart {
	ld	%1,%2
	add	a,%1
} by {
	add	a,%2
	; peephole z88dk-606ad1
} if notUsed(%1), canAssign('(hl)' %2)

replace restart {
	ld	%1,%2
	sub	a,%1
} by {
	sub	a,%2
	; peephole z88dk-606ad2
} if notUsed(%1), canAssign('(hl)' %2)

replace restart {
	ld	%1,%2
	sbc	a,%1
} by {
	sbc	a,%2
	; peephole z88dk-606ad3
} if notUsed(%1), canAssign('(hl)' %2)

replace restart {
	xor	a,a
	ld	%1,%2
	xor	a,a
} by {
	xor	a,a
	ld	%1,%2
	; peephole z88dk-606ae
} if notSame(%1 'a')

replace restart {
	ld	%1,h
	ld	a,l
	sub	a,%2
	ld	a,%1
} by {
	ld	%1,h
	ld	a,l
	sub	a,%2
	ld	a,h
	; peephole z88dk-606af
}

replace restart {
	ld	l,%1
	ld	h,%2
	ld	d,l
} by {
	ld	l,%1
	ld	h,%2
	ld	d,%1
	; peephole z88dk-606ah
} if notSame(%1 'h'), notSame(%1 '(hl)')

replace restart {
	ld	e,l
	ld	a,e
} by {
	ld	e,l
	ld	a,l
	; peephole z88dk-606ai
}

replace restart {
	ld	d,h
	ld	a,d
} by {
	ld	d,h
	ld	a,h
	; peephole z88dk-606aj
}

replace restart {
	ld	%1,%2
	ld	%3 (%4),%1
} by {
	ld	%3 (%4),%2
	ld	%1,%2
	; peephole z88dk-606ak
} if canAssign(%2 '(hl)')

replace restart {
	ld	a,l
	ld	e,a
} by {
	ld	a,l
	ld	e,l
	; peephole z88dk-606al
}

replace restart {
	ld	a,b
	ld	h,a
} by {
	ld	a,b
	ld	h,b
	; peephole z88dk-606am
}

replace restart {
	ld	%1,#0x00
	ld	%2,%3
	ld	%4,#0x00
} by {
	ld	%1,#0x00
	ld	%2,%3
	ld	%4,%1
	; peephole z88dk-606an1
} if notSame(%1 %2), canAssign(%1 '(hl)')

replace restart {
	ld	%1,#0x00
	ld	%4,#0x00
} by {
	ld	%1,#0x00
	ld	%4,%1
	; peephole z88dk-606an2
} if canAssign(%1 '(hl)')

replace restart {
	ld	b,h
	ld	e,b
} by {
	ld	b,h
	ld	e,h
	; peephole z88dk-606ao
}

replace restart {
	ld	b,h
	ld	e,h
	ld	c,b
} by {
	ld	b,h
	ld	e,h
	ld	c,h
	; peephole z88dk-606ap
}

replace restart {
	ld	a,h
	ld	c,l
	ld	b,h
	ld	h,a
} by {
	ld	a,h
	ld	c,l
	ld	b,h
	; peephole z88dk-606aq
}

replace restart {
	ld	l,h
	ld	d,b
	ld	a,l
} by {
	ld	l,h
	ld	d,b
	ld	a,h
	; peephole z88dk-606ar
}

replace restart {
	ld	l,h
	ld	d,b
	ld	a,h
	ld	e,l
} by {
	ld	l,h
	ld	d,b
	ld	a,h
	ld	e,h
	; peephole z88dk-606as
}

replace restart {
	ld	b,l
	ld	d,b
} by {
	ld	b,l
	ld	d,l
	; peephole z88dk-606at
}

replace restart {
	ld	b,l
	ld	d,l
	ld	a,h
	ld	e,h
	or	a,b
} by {
	ld	b,l
	ld	d,l
	ld	a,h
	ld	e,h
	or	a,l
	; peephole z88dk-606au
}

replace restart {
	ld	a,l
	ld	c,a
} by {
	ld	a,l
	ld	c,l
	; peephole z88dk-606av
}

replace restart {
	ld	b,h
	ld	e,l
	ld	a,b
} by {
	ld	b,h
	ld	e,l
	ld	a,h
	; peephole z88dk-606aw
}

replace restart {
	ld	e,l
	ld	a,h
	ld	d,h
	or	a,e
} by {
	ld	e,l
	ld	a,h
	ld	d,h
	or	a,l
	; peephole z88dk-606ax
}

replace restart {
	ld	b,h
	ld	c,a
	ld	a,b
} by {
	ld	b,h
	ld	c,a
	ld	a,h
	; peephole z88dk-606ay
}

replace restart {
	ld	%1,%2
	ld	%3,%4
	ld	%2,%1
} by {
	ld	%1,%2
	ld	%3,%4
	; peephole z88dk-606az
} if notSame(%1 %3), notSame(%2 %3), same(%1 'a' 'b' 'c' 'd' 'e' 'h' 'l'), same(%2 'a' 'b' 'c' 'd' 'e' 'h' 'l')

replace restart {
	ld	hl,#%1
} by {
	; peephole z88dk-607a
} if notUsed('hl')

replace restart {
	ld	hl,#%1 + %2
} by {
	; peephole z88dk-607b
} if notUsed('hl')

replace restart {
	ld	de,#%1
} by {
	; peephole z88dk-607c
} if notUsed('de')

replace restart {
	ld	de,#%1 + %2
} by {
	; peephole z88dk-607d
} if notUsed('de')

replace restart {
	ld	bc,#%1
} by {
	; peephole z88dk-607e
} if notUsed('bc')

replace restart {
	ld	bc,#%1 + %2
} by {
	; peephole z88dk-607f
} if notUsed('bc')

replace restart {
	ld	%1,#(%2 + %3) + %4
} by {
	; peephole z88dk-607g
} if notUsed(%1)
// notVolatile

replace restart {
	ld	%1,#%2 + %3 + %4
} by {
	; peephole z88dk-607h
} if notUsed(%1)

replace restart {
	ld	de,(#%1)
	ld	hl,#%2 + %3
	ex	de,hl
} by {
	ld	hl,(#%1)
	ld	de,#%2 + %3
	; peephole z88dk-608a
}

replace restart {
	ld	de,%1
	ld	hl,%2
	ex	de,hl
} by {
	ld	de,%2
	ld	hl,%1
	; peephole z88dk-608b
}

replace restart {
	ld	de,%1
	ex	de,hl
} by {
	ld	hl,%1
	; peephole z88dk-608c
} if notUsed('de')

replace restart {
	ld	hl,%1
	ex	de,hl
} by {
	ld	de,%1
	; peephole z88dk-608d
} if notUsed('hl')

replace restart {
	ld	bc,(#%1)
	ld	de,(#%2)
	ld	l,c
	ld	h,b
} by {
	ld	hl,(#%1)
	ld	de,(#%2)
	ld	c,l
	ld	b,h
	; peephole z88dk-608e1
}

replace restart {
	ld	bc,(#%1 + %3)
	ld	de,(#%2 + %4)
	ld	l,c
	ld	h,b
} by {
	ld	hl,(#%1 + %3)
	ld	de,(#%2 + %4)
	ld	c,l
	ld	b,h
	; peephole z88dk-608e2
}

replace restart {
	ld	%1,#%2 + 0
} by {
	ld	%1,#%2
	; peephole z88dk-609a
}

replace restart {
	ld	%1,(#%2 + 0)
} by {
	ld	%1,(#%2)
	; peephole z88dk-609b
}

replace restart {
	ld	%1,#%2 + 0 + %3
} by {
	ld	%1,#%2 + %3
	; peephole z88dk-609c
}

replace restart {
	ld	%1,(#%2 + 0 + %3)
} by {
	ld	%1,(#%2 + %3)
	; peephole z88dk-609d
}

replace restart {
	ld	%1,#%2 + %3 + 0
} by {
	ld	%1,#%2 + %3
	; peephole z88dk-609e
}

replace restart {
	ld	%1,(#%2 + %3 + 0)
} by {
	ld	%1,(#%2 + %3)
	; peephole z88dk-609f
}

replace restart {
	ld	%4,(#(%1 + %2) + %3)
} by {
	ld	%4,(#%1 + %2 + %3)
	; peephole z88dk-609g
}

replace restart {
	ld	%4,(#(%1 + %2))
} by {
	ld	%4,(#%1 + %2)
	; peephole z88dk-609h
}

//replace restart {
//	ld	hl,#%1 + %2
//	push	de
//} by {
//	push	de
//	ld	hl,#%1 + %2
//	; peephole z88dk-610a - what benefit in swapping these instructions?
//}

//replace restart {
//	ld	hl,#%1
//	push	de
//} by {
//	push	de
//	ld	hl,#%1
//	; peephole z88dk-610b - what benefit in swapping these instructions?
//}

replace restart {
	ld	((%1 + %2)),%3
} by {
	ld	(%1 + %2),%3
	; peephole z88dk-611a
}

replace restart {
	ld	%3,#<((%1 + %2))
} by {
	ld	%3,#<(%1+%2)
	; peephole z88dk-611b
}

replace restart {
	ld	%3,#>((%1 + %2))
} by {
	ld	%3,#>(%1+%2)
	; peephole z88dk-611c
}

replace restart {
	add	a,#<((%1 + %2))
} by {
	add	a,#<(%1+%2)
	; peephole z88dk-611d
}

replace restart {
	add	a,#>((%1 + %2))
} by {
	add	a,#>(%1+%2)
	; peephole z88dk-611e
}

replace restart {
	adc	a,#<((%1 + %2))
} by {
	adc	a,#<(%1+%2)
	; peephole z88dk-611f
}

replace restart {
	adc	a,#>((%1 + %2))
} by {
	adc	a,#>(%1+%2)
	; peephole z88dk-611g
}

replace restart {
	sub	a,#<((%1 + %2))
} by {
	sub	a,#<(%1+%2)
	; peephole z88dk-611h
}

replace restart {
	sub	a,#>((%1 + %2))
} by {
	sub	a,#>(%1+%2)
	; peephole z88dk-611i
}

replace restart {
	sbc	a,#<((%1 + %2))
} by {
	sbc	a,#<(%1+%2)
	; peephole z88dk-611j
}

replace restart {
	sbc	a,#>((%1 + %2))
} by {
	sbc	a,#>(%1+%2)
	; peephole z88dk-611k
}

replace restart {
	ld	%1,#%2 + 1 + 1
} by {
	ld	%1,#%2 + 2
	; peephole z88dk-611l1
}

replace restart {
	ld	%1,#%2 + 2 + 1
} by {
	ld	%1,#%2 + 3
	; peephole z88dk-611l2
}

replace restart {
	ld	%1,#%2 + 3 + 1
} by {
	ld	%1,#%2 + 4
	; peephole z88dk-611l3
}

replace restart {
	ld	(#%1 + 1 + 1),%2
} by {
	ld	(#%1 + 2),%2
	; peephole z88dk-611l4
}

replace restart {
	ld	((%1 + %2)+%3),%4
} by {
	ld	(%1 + %2 + %3),%4
	; peephole z88dk-612a
}

replace restart {
	and	a,%1
	and	a,%1
} by {
	and	a,%1
	; peephole z88dk-613a
} if notVolatile(%1)

replace restart {
	or	a,%1
	or	a,%1
} by {
	or	a,%1
	; peephole z88dk-613b
} if notVolatile(%1)

//replace restart {
//	ld	hl,#0xFFFF
//	add	hl,de
//} by {
//	ld	l,e
//	ld	h,d
//	dec	hl
//	; peephole z88dk-614a  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	hl,#0xFFFF
//	add	hl,bc
//} by {
//	ld	l,c
//	ld	h,b
//	dec	hl
//	; peephole z88dk-614b  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	hl,#0x0001
//	add	hl,de
//} by {
//	ld	l,e
//	ld	h,d
//	inc	hl
//	; peephole z88dk-614c  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	hl,#0x0001
//	add	hl,bc
//} by {
//	ld	l,c
//	ld	h,b
//	inc	hl
//	; peephole z88dk-614d  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	bc,#0xFFFF
//	add	hl,bc
//} by {
//	ld	bc,#0xFFFF
//	dec	hl
//	; peephole z88dk-614e  INCORRECT IF FLAGS USED
//}
// trashes 32-bit math

//replace restart {
//	ld	de,#0xFFFF
//	add	hl,de
//} by {
//	ld	de,#0xFFFF
//	dec	hl
//	; peephole z88dk-614f  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	bc,#0x0001
//	add	hl,bc
//} by {
//	ld	bc,#0x0001
//	inc	hl
//	; peephole z88dk-614g  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	de,#0x0001
//	add	hl,de
//} by {
//	ld	de,#0x0001
//	inc	hl
//	; peephole z88dk-614h  INCORRECT IF FLAGS USED
//}

//replace restart {
//	ld	a,%1
//	add	a,#0xFF
//	ld	%1,a
//} by {
//	dec	%1
//	ld	a,%1
//	; peephole z88dk-615  INCORRECT IF FLAGS USED
//} if canAssign(%1 '#0xFF')

replace restart {
	ld	%1,#%2 + 1 - 1
} by {
	ld	%1,#%2
	; peephole z88dk-616a
}

replace restart {
	ld	%1,#%2 + 2 - 1
} by {
	ld	%1,#%2 + 1
	; peephole z88dk-616b
}

replace restart {
	ld	%1,#%2 + 3 - 1
} by {
	ld	%1,#%2 + 2
	; peephole z88dk-616c
}

replace restart {
	ld	%1,(#%2 + 1 - 1)
} by {
	ld	%1,(#%2)
	; peephole z88dk-617a
}

replace restart {
	ld	%1,(#%2 + 2 - 1)
} by {
	ld	%1,(#%2 + 1)
	; peephole z88dk-617b
}

replace restart {
	ld	%1,(#%2 + 3 - 1)
} by {
	ld	%1,(#%2 + 2)
	; peephole z88dk-617c
}

replace restart {
	ld	bc,(%1)
	push	bc
} by {
	ld	hl,(%1)
	push	hl
	; peephole z88dk-618a
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	de,(%1)
	push	de
} by {
	ld	hl,(%1)
	push	hl
	; peephole z88dk-618b
} if notUsed('de'), notUsed('hl')

replace restart {
	ld	bc,(%1 + %2)
	push	bc
} by {
	ld	hl,(%1 + %2)
	push	hl
	; peephole z88dk-618c
} if notUsed('bc'), notUsed('hl')

replace restart {
	ld	de,(%1 + %2)
	push	de
} by {
	ld	hl,(%1 + %2)
	push	hl
	; peephole z88dk-618d
} if notUsed('de'), notUsed('hl')

replace restart {
	ex	de,hl
	srl	d
	rr	e
} by {
	srl	h
	rr	l
	ex	de,hl
	; peephole z88dk-619a
}

replace restart {
	ex	de,hl
	sra	d
	rr	e
} by {
	sra	h
	rr	l
	ex	de,hl
	; peephole z88dk-619b
}

replace restart {
	ex	de,hl
	sla	e
	rl	d
} by {
	add	hl,hl
	ex	de,hl
	; peephole z88dk-619c
}

replace restart {
	ld	h,%1
	ld	l,%2
	ld	a,h
	ld	h,l
	ld	l,a
} by {
	ld	l,%1
	ld	h,%2
	ld	a,l
	; peephole z88dk-620a
}

//replace restart {
//	ld	%1,%2
//	pop	%3
//} by {
//	pop	%3
//	ld	%1,%2
//	; peephole z88dk-621 - what benefit in swapping these instructions?
//} if operandsNotRelated(%1 %3), operandsNotRelated(%2 %3), notSame(%1 'sp'), notSame(%3 'ix')

replace restart {
	ld	c,l
	ld	b,h
	pop	hl
	push	bc
} by {
	ld	c,l
	ld	b,h
	ex	(sp),hl
	; peephole z88dk-622a
}

replace restart {
	ld	c,l
	ld	b,h
	ex	(sp),hl
	ld	l,c
	ld	h,b
} by {
	pop	bc
	push	hl
	ld	c,l
	ld	b,h
	; peephole z88dk-622b
}

replace restart {
	push	%1
	pop	%2
} by {
	; peephole z88dk-623
} if notUsed(%2)












replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	b,a
	ld	a,%1
	ld	%1,b
	; peephole z88dk-700a
} if notSame(%1 'b'), notUsed('b')

replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	c,a
	ld	a,%1
	ld	%1,c
	; peephole z88dk-700b
} if notSame(%1 'c'), notUsed('c')

replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	d,a
	ld	a,%1
	ld	%1,d
	; peephole z88dk-700c
} if notSame(%1 'd'), notUsed('d')

replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	e,a
	ld	a,%1
	ld	%1,e
	; peephole z88dk-700d
} if notSame(%1 'e'), notUsed('e')

replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	l,a
	ld	a,%1
	ld	%1,l
	; peephole z88dk-700e
} if notSame(%1 'l'), notUsed('l')

replace restart {
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
	sra	%1
	rra
} by {
	rla
	rl	%1
	sbc	a,a
	ld	h,a
	ld	a,%1
	ld	%1,h
	; peephole z88dk-700f
} if notSame(%1 'h'), notUsed('h')

replace restart {
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
} by {
	rla
	rl	%1
	ld	a,%1
	; peephole z88dk-701a
} if notUsed(%1)

replace restart {
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
	srl	%1
	rra
} by {
	rla
	rl	%1
	ld	a,%1
	ld	%1,#0x00
	rl	%1
	; peephole z88dk-701b
}


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// POISON REMOVE
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

barrier

replace {
	z88dk_poison
} by {
	; poison removal
}


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// SDCC PEEPHOLE RULES JP->JR ONLY FROM #9570
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

// peeph-z80.def - Z80 peephole rules
//
// Some of these peepholes could be potentially moved to peeph.def, but a
// GBZ80 expert should have a look at them before.
//
// (c) Philipp Klaus Krause (pkk@spth.de, philipp@colecovision.eu) 2006 - 2012
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option) any
// later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

// These ex-generating rules should be among the last ones since ex counts as a read from both hl and de for notUsed().
barrier

replace restart {
	ld	d,h
	ld	e,l
} by {
	; peephole 146 used ex to load hl into de.
	ex	de,hl
} if notUsed('hl')

replace restart {
	ld	e,l
	ld	d,h
} by {
	; peephole 147 used ex to load hl into de.
	ex	de,hl
} if notUsed('hl')

replace restart {
	ld	l,e
	ld	h,d
} by {
	; peephole 148 used ex to load de into hl.
	ex	de,hl
} if notUsed('de')

barrier

// Should be one of the last ones. Opens the code to further peephole optimization.
replace restart {
%1:
} by {
	; peephole 149 removed unused label %1.
} if labelRefCount(%1 0)

// Ensure that all rules above see only jp, not jr.
barrier

replace {
	add	hl,de
	pop	de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
%2:
} by {
	; peephole 150-3 removed addition using short jumps in jump-table.
	pop	de
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
%2:
} if labelJTInRange

replace {
	add	hl,de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
%2:
} by {
	; peephole 150-3' removed addition using short jumps in jump-table.
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
%2:
} if labelJTInRange

replace {
	add	hl,de
	pop	de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
%2:
} by {
	; peephole 150-4 removed addition using short jumps in jump-table.
	pop	de
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
%2:
} if labelJTInRange

replace {
	add	hl,de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
%2:
} by {
	; peephole 150-4' removed addition using short jumps in jump-table.
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
%2:
} if labelJTInRange

replace {
	add	hl,de
	pop	de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
%2:
} by {
	; peephole 150-5 removed addition using short jumps in jump-table.
	pop	de
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
%2:
} if labelJTInRange

replace {
	add	hl,de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
%2:
} by {
	; peephole 150-5' removed addition using short jumps in jump-table.
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
%2:
} if labelJTInRange

replace {
	add	hl,de
	pop	de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
	jp	%10
%2:
} by {
	; peephole 150-6 removed addition using short jumps in jump-table.
	pop	de
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
	jr	%10
%2:
} if labelJTInRange

replace {
	add	hl,de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
	jp	%10
%2:
} by {
	; peephole 150-6' removed addition using short jumps in jump-table.
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
	jr	%10
%2:
} if labelJTInRange

replace {
	add	hl,de
	pop	de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
	jp	%10
	jp	%11
%2:
} by {
	; peephole 150-7 removed addition using short jumps in jump-table.
	pop	de
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
	jr	%10
	jr	%11
%2:
} if labelJTInRange

replace {
	add	hl,de
	jp	(hl)
%1:
	jp	%5
	jp	%6
	jp	%7
	jp	%8
	jp	%9
	jp	%10
	jp	%11
%2:
} by {
	; peephole 150-7' removed addition using short jumps in jump-table.
	jp	(hl)
%1:
	jr	%5
	jr	%6
	jr	%7
	jr	%8
	jr	%9
	jr	%10
	jr	%11
%2:
} if labelJTInRange

barrier

// Do all jump optimizations before replacing by ret.

replace restart {
	jp	%5
} by {
	ret
	; peephole 151 replaced jump by return.
} if labelIsReturnOnly(%5), labelRefCountChange(%5 -1)

replace restart {
	jp	%1,%5
} by {
	ret	%1
	; peephole 152 replaced jump by return.
} if labelIsReturnOnly(%5), labelRefCountChange(%5 -1)

// Replace jp by ret before replacing jp by jr outside of jump tables, since using ret can reduce the number of references to jump labels.
barrier

replace {
	jp	%5
} by {
	jr	%5
	; peephole 153 changed absolute to relative unconditional jump.
} if labelInRange(%5)

replace {
	jp	Z,%5
} by {
	jr	Z,%5
	; peephole 154 changed absolute to relative conditional jump.
} if labelInRange(%5)

replace {
	jp	NZ,%5
} by {
	jr	NZ,%5
	; peephole 155 changed absolute to relative conditional jump.
} if labelInRange(%5)

replace {
	jp	C,%5
} by {
	jr	C,%5
	; peephole 156 changed absolute to relative conditional jump.
} if labelInRange(%5)

replace {
	jp	NC,%5
} by {
	jr	NC,%5
	; peephole 157 changed absolute to relative conditional jump.
} if labelInRange(%5)

replace {
	dec b
	jr	NZ,	%5	
} by {
	djnz	%5
	; peephole 156 used djnz
}
