1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Fixed tests.

This commit is contained in:
jespergravgaard 2018-12-25 21:47:19 +01:00
parent 2b25aec8ee
commit f6a566e2f8
11 changed files with 48 additions and 48 deletions

View File

@ -687,18 +687,18 @@ Statement [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [8] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) 250 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [9] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [13] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (const byte) VIC_RSEL#0 [ ] ( ) always clobbers reg byte a
Statement [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [16] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) 250 [ ] ( ) always clobbers reg byte a
Statement [17] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1() [ ] ( ) always clobbers reg byte a
Statement [18] *((const byte*) BORDERCOL#0) ← (const byte) RED#0 [ ] ( ) always clobbers reg byte a
Statement [20] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [21] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/word/signed word/dword/signed dword) 255^(const byte) VIC_RSEL#0 [ ] ( ) always clobbers reg byte a
Statement [22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [23] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) 253 [ ] ( ) always clobbers reg byte a
Statement [24] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() [ ] ( ) always clobbers reg byte a
Statement [25] *((const byte*) BORDERCOL#0) ← (const byte) RED#0 [ ] ( ) always clobbers reg byte a
Statement [13] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (const byte) VIC_RSEL#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [16] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) 250 [ ] ( [ ] ) always clobbers reg byte a
Statement [17] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq_bottom_1() [ ] ( [ ] ) always clobbers reg byte a
Statement [18] *((const byte*) BORDERCOL#0) ← (const byte) RED#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [20] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [21] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/word/signed word/dword/signed dword) 255^(const byte) VIC_RSEL#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [22] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [23] *((const byte*) RASTER#0) ← (byte/word/signed word/dword/signed dword) 253 [ ] ( [ ] ) always clobbers reg byte a
Statement [24] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() [ ] ( [ ] ) always clobbers reg byte a
Statement [25] *((const byte*) BORDERCOL#0) ← (const byte) RED#0 [ ] ( [ ] ) always clobbers reg byte a
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -224,10 +224,10 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [0] (byte) col1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [1] (byte) col2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8 [ ] ( ) always clobbers reg byte a
Statement [5] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 col2#0 ] ( ) always clobbers reg byte a
Statement [8] (byte) col1#1 ← ++ (byte) col1#0 [ col2#0 ] ( ) always clobbers reg byte y
Statement [9] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) col2#0 [ col2#0 ] ( ) always clobbers reg byte a
Statement [10] (byte) col2#1 ← ++ (byte) col2#0 [ ] ( ) always clobbers reg byte y
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 col2#0 ] ( [ col1#0 col2#0 ] ) always clobbers reg byte a
Statement [8] (byte) col1#1 ← ++ (byte) col1#0 [ col2#0 ] ( [ col2#0 ] ) always clobbers reg byte y
Statement [9] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) col2#0 [ col2#0 ] ( [ col2#0 ] ) always clobbers reg byte a
Statement [10] (byte) col2#1 ← ++ (byte) col2#0 [ ] ( [ ] ) always clobbers reg byte y
Potential registers zp ZP_BYTE:2 [ col1#0 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_BYTE:3 [ col2#0 ] : zp ZP_BYTE:3 ,
Potential registers zp ZP_BYTE:4 [ col1#1 ] : zp ZP_BYTE:4 ,

View File

@ -438,17 +438,17 @@ Statement [8] (byte~) main::$1 ← (byte) main::a#2 + (byte) main::y#4 [ main::x
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::x#6 main::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::a#2 main::a#1 ]
Statement [17] *((const byte*) IRQ_STATUS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ col1#0 ] ( ) always clobbers reg byte a
Statement [17] *((const byte*) IRQ_STATUS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ col1#0 ] ( [ col1#0 ] ) always clobbers reg byte a
Statement asm { lda$dc0d } always clobbers reg byte a
Statement [19] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 ] ( ) always clobbers reg byte a
Statement [20] (byte) col1#1 ← ++ (byte) col1#0 [ ] ( ) always clobbers reg byte y
Statement [19] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 ] ( [ col1#0 ] ) always clobbers reg byte a
Statement [20] (byte) col1#1 ← ++ (byte) col1#0 [ ] ( [ ] ) always clobbers reg byte y
Statement [0] (byte) col1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [8] (byte~) main::$1 ← (byte) main::a#2 + (byte) main::y#4 [ main::x#6 main::y#4 main::a#2 main::$1 ] ( main:2 [ main::x#6 main::y#4 main::a#2 main::$1 ] ) always clobbers reg byte a
Statement [17] *((const byte*) IRQ_STATUS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ col1#0 ] ( ) always clobbers reg byte a
Statement [17] *((const byte*) IRQ_STATUS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ col1#0 ] ( [ col1#0 ] ) always clobbers reg byte a
Statement asm { lda$dc0d } always clobbers reg byte a
Statement [19] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 ] ( ) always clobbers reg byte a
Statement [20] (byte) col1#1 ← ++ (byte) col1#0 [ ] ( ) always clobbers reg byte y
Statement [19] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) col1#0 [ col1#0 ] ( [ col1#0 ] ) always clobbers reg byte a
Statement [20] (byte) col1#1 ← ++ (byte) col1#0 [ ] ( [ ] ) always clobbers reg byte y
Potential registers zp ZP_BYTE:2 [ main::x#6 main::x#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ main::y#4 main::y#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ main::a#2 main::a#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,

View File

@ -656,10 +656,10 @@ Statement [8] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [9] *((const byte*) RASTER#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [11] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [16] return [ ] ( ) always clobbers reg byte a reg byte x reg byte y
Statement [17] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [18] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( ) always clobbers reg byte a
Statement [19] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [16] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [17] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( do_irq:15 [ ] ) always clobbers reg byte a
Statement [18] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( do_irq:15 [ ] ) always clobbers reg byte a
Statement [19] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( do_irq:15 [ ] ) always clobbers reg byte a
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -327,10 +327,10 @@ Statement [8] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [9] *((const byte*) RASTER#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [11] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [14] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [15] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( ) always clobbers reg byte a
Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [17] return [ ] ( ) always clobbers reg byte a reg byte x reg byte y
Statement [14] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [15] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [17] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -327,10 +327,10 @@ Statement [8] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [9] *((const byte*) RASTER#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [11] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [14] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [15] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( ) always clobbers reg byte a
Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [17] return [ ] ( ) always clobbers reg byte a reg byte x reg byte y
Statement [14] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [15] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [17] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -256,9 +256,9 @@ Statement [6] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [7] *((const byte*) RASTER#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [8] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [9] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_KEYBOARD)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [13] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( ) always clobbers reg byte a
Statement [14] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [12] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [13] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [14] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -256,9 +256,9 @@ Statement [6] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0)
Statement [7] *((const byte*) RASTER#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [8] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [9] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( ) always clobbers reg byte a
Statement [13] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( ) always clobbers reg byte a
Statement [14] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( ) always clobbers reg byte a
Statement [12] *((const byte*) BGCOL#0) ← (const byte) WHITE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [13] *((const byte*) BGCOL#0) ← (const byte) BLACK#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [14] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
REGISTER UPLIFT SCOPES
Uplift Scope [main]

View File

@ -296,9 +296,9 @@ Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()
Statement [6] if((byte) col#12<=(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] (byte) col#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ col#1 ] ( main:2 [ col#1 ] ) always clobbers reg byte a
Statement asm { lda$dc0d } always clobbers reg byte a
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( ) always clobbers reg byte a
Statement [10] if((byte) col#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto irq::@return [ col#0 ] ( ) always clobbers reg byte a
Statement [11] (byte) col#3 ← ++ (byte) col#0 [ ] ( ) always clobbers reg byte y
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
Statement [10] if((byte) col#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto irq::@return [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
Statement [11] (byte) col#3 ← ++ (byte) col#0 [ ] ( [ ] ) always clobbers reg byte y
Potential registers zp ZP_BYTE:2 [ col#12 col#0 col#1 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_BYTE:3 [ col#3 ] : zp ZP_BYTE:3 ,

View File

@ -310,10 +310,10 @@ Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()
Statement [6] if((byte) col#14<=(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] (byte) col#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ col#1 ] ( main:2 [ col#1 ] ) always clobbers reg byte a
Statement asm { lda$dc0d } always clobbers reg byte a
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( ) always clobbers reg byte a
Statement [10] if((byte) col#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto irq::@1 [ col#0 ] ( ) always clobbers reg byte a
Statement [11] (byte) col#4 ← (byte) col#0 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( ) always clobbers reg byte a
Statement [13] (byte) col#3 ← ++ (byte) col#0 [ ] ( ) always clobbers reg byte y
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
Statement [10] if((byte) col#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto irq::@1 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
Statement [11] (byte) col#4 ← (byte) col#0 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( [ ] ) always clobbers reg byte a
Statement [13] (byte) col#3 ← ++ (byte) col#0 [ ] ( [ ] ) always clobbers reg byte y
Potential registers zp ZP_BYTE:2 [ col#14 col#0 col#1 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_BYTE:3 [ col#4 ] : zp ZP_BYTE:3 ,
Potential registers zp ZP_BYTE:4 [ col#3 ] : zp ZP_BYTE:4 ,

View File

@ -213,7 +213,7 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [0] (byte) col#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ col#0 ] ( ) always clobbers reg byte a
Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ col#0 ] ( main:2 [ col#0 ] ) always clobbers reg byte a
Statement asm { lda$dc0d } always clobbers reg byte a
Statement [8] *((const byte*) BGCOL#0) ← (byte) col#0 [ ] ( ) always clobbers reg byte a
Statement [8] *((const byte*) BGCOL#0) ← (byte) col#0 [ ] ( [ ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ col#2 col#0 col#1 ] : zp ZP_BYTE:2 ,
REGISTER UPLIFT SCOPES