A routine taking \$(a,b,c)\$ into R0, R1 and R2 respectively and setting the carry if \$(a,b,c)\$ is not a triangle, or clearing it otherwise.
083 | MOVR R0, R3
0CB | ADDR R1, R3
15A | CMPR R3, R2
02F | ADCR R7
0D3 | ADDR R2, R3
049 | SLL R1
159 | CMPR R3, R1
201 002 | BC @@rtn
048 | SLL R0
158 | CMPR R3, R0
0AF | @@rtn JR R5
How?
Instead of testing:
$$\cases{a+b>c\\a+c>b\\b+c>a}$$
We test:
$$\cases{a+b>c\\a+b+c>2b\\a+b+c>2a}$$
The left parts of the inequalities are stored into R3. If the first test fails (when \$a+b\$ is stored into R3 and compared with R2), the carry is set and added to the program counter (R7), forcing the next instruction to be skipped. Consequently, R3 is not updated to \$a+b+c\$ and the last 2 comparisons are turned into:
$$\cases{a+b>2b\\a+b>2a}\Leftrightarrow\cases{a>b\\b>a}$$
which of course is never true, so the test is guaranteed to fail as expected.
All in all, this saves a branch which would have cost 1 extra DECLE.
Full commented test code
ROMW 10 ; use 10-bit ROM width
ORG $4800 ; map this program at $4800
;; ------------------------------------------------------------- ;;
;; main code ;;
;; ------------------------------------------------------------- ;;
main PROC
SDBD ; set up an interrupt service routine
MVII #isr, R0 ; to do some minimal STIC initialization
MVO R0, $100
SWAP R0
MVO R0, $101
EIS ; enable interrupts
MVII #$200, R4 ; R4 = pointer into backtab
SDBD ; R5 = pointer into test cases
MVII #tc, R5
MVII #13, R3 ; R3 = number of test cases
@@loop MVI@ R5, R0 ; R0 = a
MVI@ R5, R1 ; R1 = b
MVI@ R5, R2 ; R2 = c
PSHR R3 ; save R3 and R5 on the stack
PSHR R5
CALL tr ; invoke our routine
PULR R5 ; restore R3 and R5
PULR R3
MVII #$80, R0 ; R0 = '0'
BC @@draw
MVII #$88, R0 ; or '1' if the carry is not set
@@draw MVO@ R0, R4 ; draw this character
DECR R3 ; next test case
BNEQ @@loop
DECR R7 ; loop forever
;; ------------------------------------------------------------- ;;
;; test cases ;;
;; ------------------------------------------------------------- ;;
tc PROC
DECLE 1, 1, 1 ; true
DECLE 1, 2, 3 ; false
DECLE 2, 1, 3 ; false
DECLE 1, 3, 2 ; false
DECLE 3, 2, 1 ; false
DECLE 3, 1, 2 ; false
DECLE 2, 2, 2 ; true
DECLE 3, 4, 5 ; true
DECLE 3, 5, 4 ; true
DECLE 5, 3, 4 ; true
DECLE 5, 4, 3 ; true
DECLE 10, 9, 3 ; true
DECLE 100, 10, 10 ; false
ENDP
;; ------------------------------------------------------------- ;;
;; ISR ;;
;; ------------------------------------------------------------- ;;
isr PROC
MVO R0, $0020 ; enable display
CLRR R0
MVO R0, $0030 ; no horizontal delay
MVO R0, $0031 ; no vertical delay
MVO R0, $0032 ; no border extension
MVII #$D, R0
MVO R0, $0028 ; light-blue background
MVO R0, $002C ; light-blue border
JR R5 ; return from ISR
ENDP
;; ------------------------------------------------------------- ;;
;; our routine ;;
;; ------------------------------------------------------------- ;;
tr PROC
MOVR R0, R3 ; R3 = a
ADDR R1, R3 ; R3 = a + b
CMPR R3, R2 ; is R3 greater than c?
ADCR R7 ; if not, skip the next instruction
ADDR R2, R3 ; R3 = a + b + c (or still a + b if skipped)
SLL R1 ; R1 = 2b
CMPR R3, R1 ; is R3 greater than 2b?
BC @@rtn ; if not, return with the carry set
SLL R0 ; R0 = 2a
CMPR R3, R0 ; is R3 greater than 2a?
; if not, the carry is set
@@rtn JR R5 ; return
ENDP
Output

screenshot from jzIntv
1. A CP-1610 opcode is encoded with a 10-bit value (0x000 to 0x3FF), known as a 'DECLE'.